{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "a1af5000",
   "metadata": {},
   "source": [
    "# 习题\n",
    "## 习题14.1\n",
    "![image.png](./images/exercise1.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "aa9aa617",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "分类数: 2\n",
      "class_0: [array([0, 0]), array([1, 0]), array([5, 0])]\n",
      "class_1: [array([0, 2]), array([5, 2])]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "\n",
    "class DivisiveClustering:\n",
    "    def __init__(self, num_class):\n",
    "        # 聚类类别个数\n",
    "        self.num_class = num_class\n",
    "        # 聚类数据集\n",
    "        self.cluster_data = []\n",
    "        if num_class > 1:\n",
    "            self.cluster_data = [[] for _ in range(num_class)]\n",
    "\n",
    "    def fit(self, data):\n",
    "        \"\"\"\n",
    "        :param data: 数据集\n",
    "        \"\"\"\n",
    "        num_sample = data.shape[0]\n",
    "\n",
    "        if self.num_class == 1:\n",
    "            # 如果只设定了一类，将所有数据放入到该类中\n",
    "            for d in data:\n",
    "                self.cluster_data.append(d)\n",
    "        else:\n",
    "            # (1) 构造1个类，该类包含全部样本\n",
    "            # 初始化类中心\n",
    "            class_center = []\n",
    "\n",
    "            # (2) 计算n个样本两两之间的欧氏距离\n",
    "            distance = np.zeros((num_sample, num_sample))\n",
    "            for i in range(num_sample):\n",
    "                for j in range(i + 1, num_sample):\n",
    "                    distance[j, i] = distance[i, j] = np.linalg.norm(data[i, :] - data[j, :], \n",
    "                                                                     ord=2)\n",
    "\n",
    "            # (3) 分裂距离最大的两个样本，并设置为各自的类中心\n",
    "            index = np.where(np.max(distance) == distance)\n",
    "            class_1 = index[1][0]\n",
    "            class_2 = index[1][1]\n",
    "            # 记录已经分裂完成的样本\n",
    "            finished_data = [class_1, class_2]\n",
    "            class_center.append(data[class_1, :])\n",
    "            class_center.append(data[class_2, :])\n",
    "\n",
    "            num_class_temp = 2\n",
    "            # (5) 判断类的个数是否满足设定的样本类别数\n",
    "            while num_class_temp != self.num_class:\n",
    "                # (4.1) 计算未分裂的样本与目前各个类中心的距离\n",
    "                data2class_distance = np.zeros((num_sample, 1))\n",
    "                for i in range(num_sample):\n",
    "                    # 计算样本到各类中心的距离总和\n",
    "                    data2class_sum = 0\n",
    "                    for j, center_data in enumerate(class_center):\n",
    "                        if i not in finished_data:\n",
    "                            data2class_sum += np.linalg.norm(data[i, :] - center_data)\n",
    "                    data2class_distance[i] = data2class_sum\n",
    "\n",
    "                # (4.2) 分裂类间距离最大的样本作为新的类中心，构造一个新类\n",
    "                class_new_index = np.argmax(data2class_distance)\n",
    "                num_class_temp += 1\n",
    "                finished_data.append(class_new_index)\n",
    "                # 添加到类中心集合中\n",
    "                class_center.append(data[class_new_index, :])\n",
    "\n",
    "            # 根据当前的类中心，按照最近邻的原则对整个数据集进行分类\n",
    "            for i in range(num_sample):\n",
    "                data2class_distance = []\n",
    "                for j, center_data in enumerate(class_center):\n",
    "                    # 计算每个样本到类中心的距离\n",
    "                    data2class_distance.append(np.linalg.norm(data[i, :] - center_data))\n",
    "\n",
    "                # 将样本划分到最近的中心的类中\n",
    "                label = np.argmin(data2class_distance)\n",
    "                self.cluster_data[label].append(data[i, :])\n",
    "\n",
    "                \n",
    "# 使用书中例14.2的样本数据集\n",
    "dataset = np.array([[0, 2],\n",
    "                    [0, 0],\n",
    "                    [1, 0],\n",
    "                    [5, 0],\n",
    "                    [5, 2]])\n",
    "\n",
    "num_class = 2\n",
    "divi_cluster = DivisiveClustering(num_class=num_class)\n",
    "divi_cluster.fit(dataset)\n",
    "print(\"分类数:\", num_class)\n",
    "for i in range(num_class):\n",
    "    print(f\"class_{i}:\", divi_cluster.cluster_data[i])\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d3eeafd",
   "metadata": {},
   "source": [
    "# K均值聚类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "3040158e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import math\n",
    "import random\n",
    "import numpy as np\n",
    "from sklearn import datasets,cluster\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "iris = datasets.load_iris()\n",
    "data = iris['data'][:,:2]\n",
    "\n",
    "x = data[:,0]\n",
    "y = data[:,1]\n",
    "\n",
    "plt.scatter(x, y, color='green')\n",
    "plt.xlim(4, 8)\n",
    "plt.ylim(1, 5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "0cddd969",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
      " 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 2 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 2 0 0 0 1 0 0 1 2 1 0 1 0\n",
      " 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0\n",
      " 0 0]\n"
     ]
    }
   ],
   "source": [
    "# 定义聚类数的节点\n",
    "\n",
    "class ClusterNode:\n",
    "    def __init__(self, vec, left=None, right=None, distance=-1, id=None, count=1):\n",
    "        \"\"\"\n",
    "        :param vec: 保存两个数据聚类后形成新的中心\n",
    "        :param left: 左节点\n",
    "        :param right:  右节点\n",
    "        :param distance: 两个节点的距离\n",
    "        :param id: 用来标记哪些节点是计算过的\n",
    "        :param count: 这个节点的叶子节点个数\n",
    "        \"\"\"\n",
    "        self.vec = vec\n",
    "        self.left = left\n",
    "        self.right = right\n",
    "        self.distance = distance\n",
    "        self.id = id\n",
    "        self.count = count\n",
    "        \n",
    "        \n",
    "def euler_distance(point1: np.ndarray, point2: list) -> float:\n",
    "    \"\"\"\n",
    "    计算两点之间的欧拉距离，支持多维\n",
    "    \"\"\"\n",
    "    distance = 0.0\n",
    "    for a, b in zip(point1, point2):\n",
    "        distance += math.pow(a - b, 2)\n",
    "    return math.sqrt(distance)\n",
    "\n",
    "\n",
    "# 层次聚类（聚合法）\n",
    "\n",
    "class Hierarchical:\n",
    "    def __init__(self, k):\n",
    "        self.k = k\n",
    "        self.labels = None\n",
    "        \n",
    "    def fit(self, x):\n",
    "        nodes = [ClusterNode(vec=v, id=i) for i, v in enumerate(x)]\n",
    "        distances = {}\n",
    "        point_num, feature_num = x.shape\n",
    "        self.labels = [-1] * point_num\n",
    "        currentclustid = -1\n",
    "        while(len(nodes)) > self.k:\n",
    "            min_dist = math.inf\n",
    "            nodes_len = len(nodes)\n",
    "            closest_part = None\n",
    "            for i in range(nodes_len - 1):\n",
    "                for j in range(i+1, nodes_len):\n",
    "                    d_key = (nodes[i].id, nodes[j].id)\n",
    "                    if d_key not in distances:\n",
    "                        distances[d_key] = euler_distance(nodes[i].vec, nodes[j].vec)\n",
    "                    d = distances[d_key]\n",
    "                    if d < min_dist:\n",
    "                        min_dist = d\n",
    "                        closest_part = (i, j)\n",
    "                        \n",
    "            part1, part2 = closest_part\n",
    "            node1, node2 = nodes[part1], nodes[part2]\n",
    "            new_vec = [ (node1.vec[i] * node1.count + node2.vec[i] * node2.count ) / (node1.count + node2.count)\n",
    "                        for i in range(feature_num)]\n",
    "            new_node = ClusterNode(vec=new_vec,\n",
    "                                   left=node1,\n",
    "                                   right=node2,\n",
    "                                   distance=min_dist,\n",
    "                                   id=currentclustid,\n",
    "                                   count=node1.count + node2.count)\n",
    "            currentclustid -= 1\n",
    "            del nodes[part2], nodes[part1]\n",
    "            nodes.append(new_node)\n",
    "            \n",
    "        self.nodes = nodes\n",
    "        self.calc_label()\n",
    "        \n",
    "    def calc_label(self):\n",
    "        \"\"\"\n",
    "        调取聚类的结果\n",
    "        \"\"\"\n",
    "        for i, node in enumerate(self.nodes):\n",
    "            # 将节点的所有叶子节点都分类\n",
    "            self.leaf_traversal(node, i)\n",
    "\n",
    "    def leaf_traversal(self, node: ClusterNode, label):\n",
    "        \"\"\"\n",
    "        递归遍历叶子节点\n",
    "        \"\"\"\n",
    "        if node.left == None and node.right == None:\n",
    "            self.labels[node.id] = label\n",
    "        if node.left:\n",
    "            self.leaf_traversal(node.left, label)\n",
    "        if node.right:\n",
    "            self.leaf_traversal(node.right, label)\n",
    "            \n",
    "            \n",
    "            \n",
    "my = Hierarchical(3)\n",
    "my.fit(data)\n",
    "labels = np.array(my.labels)\n",
    "print(labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "aa8f4ad5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi0AAAGvCAYAAACXeeU8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABJWUlEQVR4nO3de3xT9f0/8Fdaeqc3KK6XFMJVqcqAIZd+jSDovCFFdAyUixc2kIuVDuoXf9tQJqtQv1CYFOec6GT4hUHR7wAB5+hEKlORzkkZaqH0QkGGpKlcmjb9/P7IEknbpDmH5OSck9fz8cgDcvicnM/nfNrkTfI5rxiEEAJEREREKhcW7A4QERER+YJFCxEREWkCixYiIiLSBBYtREREpAksWoiIiEgTWLQQERGRJrBoISIiIk1g0UJERESawKKFiIiINIFFCymmtLQUBoMBu3fvdttuMBhQVFTUYVutGjNmDJ555hmf2ppMJrz22msB7Y/BYEBpaWnAHr+qqgoGgwFVVVUBO4YStDIOub8f/hjfa6+9BpPJJHt/pw0bNmDAgAFISEjAuHHjcPTo0at+TNI/Fi2kSkOHDsWHH34Y7G4oYvv27bjnnnuC3Q3VKyoqQnl5eUCPkZaWhg8//BBpaWkBPc7V6uz346233sJbb72lXIck2rt3L+bMmYP58+dj27ZtsNlsuPfee9Hc3BzsrpHKdQl2B4g6kpCQgJEjRwa7G4oYMmRIsLugCUVFRUhKSsLgwYMDdoyoqChN/Nx19vvhLFgmTpyoTIeuYLfb4ekr7cLCwhAWFob169dj0qRJeOKJJwAAERERuPXWW1FRUYHvf//7SnaXNIbvtBARkd+MGzcOERERHd4effRRAMBjjz2G/Px81z42my1Y3SWNYdFCimttbUVLS4vr1hFvn9mfPHkS9913H+Lj45GZmYlf/OIXbo/j3Pf8+fMoKirCddddh4ULF7o9xh//+EdkZWUhNjYW1113Hd588023f3/44YcxceJEnDlzBjNmzECPHj1w6NAh17/bbDYsWrQI11xzDZKSkjB+/HhUVla26+urr74Kk8mEhIQEPPjgg7h8+XK7Np7WtPhyjNWrV6NPnz6IjY3F4MGD8Ze//KXDcyaXEALPP/88MjMzER8fj9GjR7udh850tP6h7dw2NTVhwYIFSE9PR1xcHMxms+tjIOcaDIPBgJMnT+KRRx5x3b+SP34mrjxe2zUfzv1Pnz6Ne++9F3FxcejXr1+79Vnr1q1DZmYmevTogaeeegpTp05FYmKiT+cqPT0dL7zwAgDgxhtvRHZ2NgBg6dKluPbaa72eQyeTyQSDwYDXX38dr7/+uutctV3P9O2332LGjBlISEiA0WjE66+/7lMfO7JlyxZERUXh7bffBgD89re/xccff9zhzbnOa/z48RgyZAhaW1vx5Zdf4rnnnkPfvn1xww03yO4HhQZ+PESKu5r1GzabDT/84Q/Ro0cP/OlPf0J9fT0WLFiAsLAwPPvss25tn376aZSWluLRRx91eyv9wIEDmD59OhYuXIh7770X+/btw4wZMzBixAj06dPH1e7bb7+F2WzG4MGDsXTpUvTs2dP1bzNnzsSePXuwYsUK9OzZE7/61a9w5513oqKiAhEREQCAt99+G42NjSgsLMS5c+cwf/58jBo1CgsWLPBprJ0dY9OmTcjLy8OKFSswfPhwbN68GQ888ABqamoQHx8v+xy3PYdFRUX41a9+hSFDhuA3v/kN7rjjDhw7dgzdu3f3yzEKCgrw6quvYv369ejRowfWrl2LH//4xzh27JhrjQkA3HfffZg1a1a7nx9//Ez46q677sLo0aMxf/58FBQUYMaMGTh9+jTCwsLwwQcfYOHChXj55ZcRHx+PWbNm4ZFHHsH27dt9euxhw4ahoqICNpsNly9fxsWLFyGEQEVFBYYNG+bTY2zfvh1NTU341a9+BQD4xS9+AQDIyspyazd9+nRkZWXhT3/6E37/+99j9uzZuOeee5CSkiLhbADvvfceZs6ciVdeeQU5OTkA0K7A8mbv3r2466670L17d+zbtw/h4eGSjk8hSBApZN++fQKAWLt2rfj4449dNwBi9erVHbZt67XXXhMRERGitrZWNDc3i+bmZpGbmyt69erVbt9BgwYJq9Xa7jEOHTokXn75ZdHS0iKEEOLs2bMiIiJCbN682dVm5syZAoB45pln2u3/xRdfCABiw4YNrm3/+Mc/xP333y9qamqEEEKMHj1axMTEiJMnT7ra3H333WLWrFntHq9Xr15uj+XrMUpLS8XGjRvd/h2A+Pvf/97uGADEvn372m33prGxUURFRYmlS5e6ttXX14v7779ffPrpp25tT5w4IQCIEydOuG3fsGGD29wI0X5uZ86cKbKyslz3T506JXbs2CFaW1vd9uvoPAnhn5+Jzsbh3H/evHmubR999JEAIGpra4UQQhQWForhw4e7/n3y5Mnipz/9qcdjtbVs2TIxYsQIUV5eLu6++25hNptFZWWlyMrKEqtWreqwP57MnDlTzJw50+P47rnnHte2r7/+WgAQH3zwgU/9dM7poUOHRHx8vHjuuefc/r2lpcU1D21vdrvdre358+fFli1bRP/+/cWAAQPEhQsXfOoDhS6+00KK69+/v8//c2zrs88+Q3NzM4xGY7t/s9lsiIyMdN0vLCzs8B2HoUOHwmaz4b//+79x4MABfPrpp2hpacHFixfd2vXs2RNPP/10u/0PHz4MwHFZs9OgQYOwdetWt3YTJ050e3emR48ePl8d4csxRo8ejb1792LBggUoKyvDP//5TwBoNw65Kioq0NTU5NaH1NTUduOUqrW11e3+rFmzsHXrVgwZMgRjxoyB2WzGvffe6/Mlvf74mfCVc+Eo4JhPAK45ve666/Cvf/0Ln3/+OeLj4/HRRx8hNzfX58ceNmwYXnjhBXz22We49tpr0djYiE8//RRffvml7N8XOePwRUNDA+666y7ExcXhs88+c/u3cePG4W9/+1uH+82cOdPto9CkpCT86Ec/QteuXXH33Xdj+/bteOihhySMhEINixbSHKPR2OFb7l26uP84Dx8+vMP9f/vb32LBggWYOXMm5syZg5tvvhljx45t127IkCGuj3quJP5zZcSVL6pCCBw4cAD9+vVDamoqAKBv376+D0rGMZ5++mmsXbsWs2bNwuLFi3HLLbcgIyND9jF96QMAfPzxx+jRo4fsrI6amhq3+zfffDMqKyvx7rvv4oMPPsBjjz2GgQMH4v333283p55c7c+Er7zNaVZWFsLCwnDjjTcCAO644w7MmTPH58e+6aabYLVa8c4772D06NFobGxESUkJ7Ha7368wu5qfTQCwWCx48skn8dhjj2Hw4ME4cOAA/uu//guA4/ersbGxw/1SUlJw9uxZ3HrrrVi5ciXuvvtuAHB9LFtXV3dV/SL940Jc0pQbbrgBX3/9NUwmE4YNG4Zhw4bBarVi7dq1Hhf1tvXSSy9hypQp+N3vfocZM2aga9eu+Oabb3zug/MF5Mr/TZ48eRJmsxkff/yxa9vVfD7vyzHWr1+PvLw8FBUVYcqUKbBarbKP15GsrCxERka69eHy5cswm83485//7NNjdOnSBRcuXHDbtnnzZrf7BQUF+Ne//oVp06bhpZdewptvvokPP/zQ9c6RU3R0NC5dutTuGP74mfCVtzlduHAhnnvuOdTW1qKqqgq7d+9GdHS0z4+dkpKCXr16Ydu2bbj22mtx7bXXYtu2bbjuuuvQtWtXSf30dK58GYcvMjIysHr1atxwww2YNm0aFi5c6Cpyr732Wtc8tL2ZTCYkJyejqqoKZWVlrsf76quvAMBtTRlRR/hOC2nKgw8+iF//+te477778NRTT7musLnhhhvcPgbwpnv37vjwww+xZ88enD59GsuXL0djY6PPL3ADBgzAj370IyxcuBA2mw1GoxErVqxA3759O3zHRg5fjtG9e3fs3bsXY8aMwbFjx7Bs2TIA8NsLdXx8PHJzc/H888+ja9euGDRoEH77298iLi4O999/v0+PceONN+Lf//43tm7dinvuuQcvvPACPv30U7c2J06cwB//+EcsW7YM3bp1w4YNGxAREdHuXaPhw4dj48aNuO6663D27FnExMTg3nvv9cvPhD/ExMTgf//3f9GzZ0/06NEDFy5cQJ8+fSQVLjfddBO2bt3q+njIZrPJ+mho+PDheOqpp7Bz504Ajne3pLzr05kr38FatmwZBgwYgI0bN2L69Ok+7fvII4/gN7/5Dfr06YNrrrkGTz31FPr168eQRepcMBfUUGhxLh5855133LZDwkJcIYQ4fvy4mDBhgoiLixMpKSniJz/5ibBYLO32PX/+fIf7V1RUiJtvvllER0cLk8kkVq9eLYYNGyZmzJjhajNz5kyRk5PjcSyXLl0SCxcuFCkpKSIpKUnk5OSI48ePu/599OjRbgtYnY/Z0eJITwtMOzvGBx98IIYMGSKioqLEwIEDxaZNm0SPHj3EL3/5y3aPBRkLcYUQwm63i+eee06kp6eLrl27irFjx4rDhw+3a+dpAasQQjz33HOuMcyYMUO8/fbbbnPb0NAgfvrTn4q0tDQRFRUlBg0aJN5+++12j1NfXy/uvvtuERMTI5KTk8Wrr77q+rer/ZnobBwd/Ty2bft///d/Ijo6WnTr1k2EhYUJACI2NtZtgXdnVqxYIeLj44UQQjQ3N4uIiAixdu3adu06W4jb0tIi5s+fL5KTk0VMTIyYPXu21/FJ+fnoaHF1Xl6eyMjI8HkhbVNTk/j5z38uevbsKZKSksS9997b4c8OUVsGITxEFxIRkU++/fZb9OjRA8uXL8ewYcPQpUsXnD17Fs888wx69+6NkpKSYHeRSBdYtBAR+cHzzz+PjRs34uTJk2hqakKPHj0wevRoLFu2DP369Qt294h0gUULERERaYLkq4dGjhzpioY2GAw+JSju2bMHAwYMQFxcHKZMmeK3HAkiIiIKHZKLFovFgj179uD8+fM4f/48jh8/3mn7yZMnIy8vD0eOHEFVVRWWL18uu8NEREQUmiQXLQ0NDejduzeSkpKQlJSEhIQEr+23b98Oo9GIOXPmwGQyIT8/Hxs3bpTdYSIiIgpNst5p+eUvf4mYmBgMHjwYR44c8dr+wIEDrm8rBYARI0agurq6XSomERERkTeSwuWc3z7ar18/VFRU4P/9v/+HWbNmub6FtSOnT592xVoDcH0z7JkzZ5CZmdmufVNTE5qamlz3W1tb8c0336B79+4+fxcJERERBZcQAo2NjUhPT0dYmH8C+CUVLREREaitrXUlVebm5mLkyJG4dOkSYmJiPO535QVKwsP3mTgVFBS0+zp5IiIi0qaampoOv9BUDklFi8FgcIvWTk5OBgA0NjZ6LFrS0tJw9uxZ1/1z584BgOtL5dpasmQJ8vLyXPcbGhrQs2dP1NTUdLp+hoiIiNTBarUiMzPzqr5ZvS1JRcuOHTuQm5uLyspKAEB1dTViY2NdX23eEbPZjIKCAtf9gwcPwmQyefw22qioKERFRbXbnpCQwKKFiIhIY/y5tEPSh0wjRozA119/jVdeeQUnTpxAQUEBZs6cCYPBAKvViubm5nb75OTkoL6+HuvXr0dVVRUKCwsxbdo0vw2AiIiIQoOkoqVHjx7YvHkzCgsLMXToUGRkZGDlypUAgEGDBrm+UfRKiYmJ2LJlC1atWoWsrCz07t0bS5Ys8U/viYiIKGSoPsbfarUiMTERDQ0N/HiIiIhIIwLx+u2fa5CIiIiIAoxFCxEREWkCixYiIiLSBBYtREREpAksWoiIiEgTWLQQERGRJrBoISIiIk1g0UJERESawKKFiIiINIFFCxEREWkCixYiIiLSBBYtREREpAksWoiIiEgTWLQQERGRJrBoISIiIk1g0UJERESawKKFiIiINIFFCxEREWkCixYiIiLSBBYtREREpAksWoiIiEgTWLQQERGRJrBoISIiIk1g0UJERESawKKFiIiINIFFCxEREWkCixYiIiLSBBYtREREpAksWoiIiEgTWLQQERGRJrBoISIiIk1g0UJERESawKKFiIiINIFFCxEREWkCixYiIiLSBBYtREREpAmyipb3338fBoMBpaWlnbZNTU2FwWBw3YYNGybnkERERBTiukjdobm5GXPnzvW5vcViwdGjR5Gamuo4YBfJhyQiIiKSXrSsXr0a11xzDWpraztt29TUhKamJvTp0weRkZGyOkhEREQESPx4qLa2Fs8//zzWrVvnU3uLxYLo6GhMnToVMTExuOWWW1BXV+d1n6amJlitVrcbERERkaSiJTc3F7Nnz8bAgQN9am+xWHD58mWMGzcOFRUVCAsLw6JFi7zuU1BQgMTERNctMzNTSheJiIhIp3z+eGj37t04dOgQ3njjDZ8fvE+fPjh16hTS0tIAAI8//jhyc3O97rNkyRLk5eW57lutVhYuRERE5Ps7LZs3b0Z9fT3S09ORlJSEhoYGjB8/Hps2bfK4T0REhKtgAYDk5OROP+6JiopCQkKC242IiIjI56KlsLAQx44dQ3l5OcrLyxEfH49XXnkFEyZM8LjPunXrMHbsWNf96upqmEymq+owERERhSafPx5KSUlBSkqK635YWBhSU1PRtWtXWK1WxMTEICIiwm2fMWPG4Gc/+xl27NiB/v37Y82aNXj44Yf91nki6pzdDuzfD9TXA2lpgNkMhIcHu1dERNL5JRF30KBB2LlzZ7vt119/PV566SXMmzcPZrMZt912GxYuXOiPQxKRD0pKAJMJuPVW4MEHHX+aTI7tRERaYxBCiGB3whur1YrExEQ0NDRwfQuRBCUlwAMPAG1/ww0Gx59btwKTJinfLyIKDYF4/eZ3DxHpkN0O5Oa2L1iA77Y9+aSjHRGRVrBoIdKh/fsBb6HVQgA1NY52RERawaKFSIfq6/3bjohIDVi0EOnQFfFIfmlHRKQGLFqIdMhsBozG7xbdtmUwAJmZjnZERFrBooVIh8LDgTVrHH9vW7g47xcVMa+FiLSFRQuRTk2a5LisOSPDfbvRyMudiUibfE7EJSLtmTQJyMlhIi4R6QOLFiKdCw8HxowJdi+IiK4ePx4iIiIiTWDRQkRERJrAooWIiIg0gUULERERaQKLFiIiItIEFi1ERESkCSxaiIiISBOY00IUZHY7w9+IiHzBooUoiEpKgNxcoLb2u21Go+N7gxizT0Tkjh8PEQVJSQnwwAPuBQsA1NU5tpeUBKdfRERqxaKFKAjsdsc7LEK0/zfntiefdLQjIiIHFi1EQbB/f/t3WK4kBFBT42hHREQOLFqIgqC+3r/tiIhCAYsWoiBIS/NvOyKiUMCihSgIzGbHVUIGQ8f/bjAAmZmOdkRE5MCihSgIwsMdlzUD7QsX5/2iIua1EBFdiUULhQy7HSgtBd580/FnsK/MmTQJ2LoVyMhw3240OrYzp4WIyB3D5SgkqDXEbdIkICeHibhERL4wCNFRUoR6WK1WJCYmoqGhAQkJCcHuDmmQM8St7U+682MYvqtBROR/gXj95sdDpGsMcSMi0g8WLaRrDHEjItIPFi2kawxxIyLSDxYtpGsMcSMi0g8WLaRrDHEjItIPFi2kawxxIyLSDxYtpHsMcZNObUF8RESAzKLl/fffh8FgQGlpaadt9+zZgwEDBiAuLg5TpkzBxYsX5RyS6KpMmgRUVQH79gGbNjn+PHGCBUtHSkoAkwm49VbgwQcdf5pMju1ERMEkuWhpbm7G3LlzfWprsVgwefJk5OXl4ciRI6iqqsLy5csld5LIH8LDgTFjgKlTHX/yI6H2nEF8bS8Tr6tzbGfhQkTBJLloWb16Na655hokJiZ22nb79u0wGo2YM2cOTCYT8vPzsXHjRlkdJaLAYhAfEamdpKKltrYWzz//PNatW+dT+wMHDiA7O9t1f8SIEaiurkZNTY3HfZqammC1Wt1uRBR4DOIjIrWTVLTk5uZi9uzZGDhwoE/tT58+jZSUFNf97t27AwDOnDnjcZ+CggIkJia6bpmZmVK6SEQyMYiPiNTO56Jl9+7dOHToEH7xi19IOsCV38fo/LvBU2gGgCVLlqChocF18/auDBH5D4P4iEjtfC5aNm/ejPr6eqSnpyMpKQkNDQ0YP348Nm3a5HGftLQ0nD171nX/3LlzAIDU1FSP+0RFRSEhIcHtRkSBxyA+IlI7n4uWwsJCHDt2DOXl5SgvL0d8fDxeeeUVTJgwweM+ZrMZZWVlrvsHDx6EyWRCRtvADCIKOgbxEZHa+Vy0pKSkwGQyuW5hYWFITU1F165dYbVa0dzc3G6fnJwc1NfXY/369aiqqkJhYSGmTZvm1wEQqYnN5nhhX7DA8afNFuweScMgPiJSM78k4g4aNAg7d+5stz0xMRFbtmzBqlWrkJWVhd69e2PJkiX+OCSR6uTnA7GxwMKFwIsvOv6MjXVs1xIG8RGRWhmE6CiVQT2sVisSExPR0NDA9S2kWvn5QGGh539fvBhYuVK5/hARBVsgXr9ZtBBdJZvN8Y6Kt9C18HDg4kUgMlK5fhERBVMgXr/5hYlEV6m4uPOUWLvd0Y6IiORj0UJ0lSor/duOiIg6xqKF6Cr17evfdkRE1DGuaSG6SlzTQkTUHte0EKlQZCSQl+e9TV4eCxYioqvVJdgdINID5+XMq1a5v+MSHu4oWHi5MxHR1ePHQ6RZly458k++/BLo39+RkxITE9w+2WyOq4QqKx1rWObODf47LHY7sH+/49uZ09Ic3x3EKH4inVDiF1zmMZjTwqKF/mPiRODtt9tvz8kB3npL6d6oV0kJkJsL1NZ+t81odHzHEBNuiTROiV/wqzgG17QQwXPBAji2T5yoZG/Uq6QEeOAB9+caAKirc2wvKQlOv4jID5T4BVfhkwjfaSFNuXTJcaVOZy5eDP5HRcFktwMmU/vnGieDwfGfpRMn+FERkeYo8Qvuh2PwnRYKeYsX+7edXu3f7/m5BgCEAGpqHO2ISGOU+AVX6ZMIixbSlC+/9G87vaqv9287IlIRJX7BVfokwqKFNKV/f/+206u0NP+2IyIVUeIXXKVPIlzTQprCNS2+cX4cXVfneBe3La5pIdIwJX7B/XAMrmmhkBcT47is2ZucnNAuWADHc8iaNY6/Gwzu/+a8X1TEgoVIk5T4BVfpkwiLFtKct97yXLj4O6fFbgdKS4E333T86e37heS0D6RJk4CtW4GMDPftRqNjO3NaiDRMiV9wFT6J8OMh0qSSEmDBAuDUqe+2pacDv/lN8DKV1BrkxkRcIh1jIq66sGihtpx5R21/cp3vWPrjPwBSj6FEn4iItIRFC4uWkKfGTCUGuRERtceFuBTy1JippNIMJiIi3WHRQpqixkwllWYwERHpDosW0hQ1ZiqpNIOJiEh3WLSQppjNjvUhbWMDnAwGIDPT0U6pYyjRJyIiYtFCGqPGTCWVZjAREekOixYdUFOgmZOcPvm6jxozlVSYwUQUWtT4REh+x0ueNU6NgWZy+iRnHzVmKjHIjSgI1PhESMxpYdHiTo2BZnL6pMZxEJFG8AlEtVi0sGhxUWOgmZw+qXEcRKQRfAJRNYbLkYsaA83k9EmN4yAijeATSMhh0aJRagw0k9MnNY6DiDSCTyAhh0WLRqkx0ExOn9Q4DiLSCD6BhByuadEo50e5dXXt158BwV3TIqVPahwHEWkEn0BUjWtayEWNgWZy+qTGcRCRRvAJJOSwaNEwNQaayemTc5+27+Cmp3sfh83meD5asMDxp83mvW9qzZ5Sa7+INEGNT4QUOEKiiooKMXLkSBEXFyduvvlm8cUXX3S6z/e+9z0BwHX7wQ9+4PPxGhoaBADR0NAgtasho6VFiH37hNi0yfFnS0uweyS9T4sXCxEeLoTjPV7HLTzcsd0f7bdtE8JodG9vNDq2B5Na+0WkOWp8IgxxgXj9lrymZciQIZg8eTJmzpyJpUuX4vjx43jvvfe87hMdHY3y8nKkpqYCALp06YKuXbv6dDyuadG//HygsNDzvy9eDKxcKb+9WrOn1NovIiJ/CHq43Pnz5zFhwgS89957iIyMxK5du/DYY4+h3svlZE1NTYiOjkZTUxMiIyMld5BFi77ZbEBsrPePRMLDgYsXgchI6e3Vmj2l1n4REflL0BfiJicnY//+/YiMjITNZsOWLVswZMgQr/tYLBZER0dj6tSpiImJwS233IK6ujqP7ZuammC1Wt1upF/FxZ2v4bDbHe3ktFdr9pRa+0VEpGayF+LGxsbinXfewYsvvui1ncViweXLlzFu3DhUVFQgLCwMixYt8ti+oKAAiYmJrltmZqbcLpIGVFZKaye1vVqzp9TaLyIiNZNdtHz00UcYOnQonnjiCa/t+vTpg1OnTmHu3Lno3bs3Hn/8cezbt89j+yVLlqChocF1q6mpkdtF0oC+faW1k9perdlTau0XEZGaSVrTcvbsWdTW1ro+Ejp8+DCGDh0Ki8WCxMREnx5j7969mDhxIi5evOhTe65p0Tel1rSoLXtKrf0iIvKXoK9pOXz4MO655x7XfcN/LnMIC/P8MOvWrcPYsWNd96urq2EymSR2k/QqMhLIy/PeJi/P0U5Oe7VmT6m1X0REaiapaBk+fDguX76MdevWoba2FqtWrYLZbEZ8fDysViuam5vb7TNmzBiUlZVhx44dOHbsGNasWYOHH37YX/0nHVi50nGZctsX6PDw9pcvy2mv1uwptfaLiEitJOe0lJaWIjc3F8ePH0d2djZefvll9OrVCyaTCUVFRZg4cWK7fV577TUsXboUly5dwkMPPYSVK1ciIiLCp+Px46HO2e2Oq0zq6x1rIMxm//8P3WZzXJFTWelYLzJ37nfvZvjLt98C06d/d4w33gC8xflcuuQoUr78Eujf35HdEhMT3DHIOYYS86dG9lY79lfvR31jPdLi02DuaUZ4mP8GLufxA90nolASkNdvv8XUBQgTcb1TIlFVavqsEseQOm69nCe92FaxTRhXGQWegetmXGUU2yr8MyFyHj/QfSIKNapIxFUa32nxTIlEVanps0ocQ+q49XKe9KLkaAke2PIABNwnxADHhGydvBWTBsqfEDmPH+g+EYWioCfiBgOLlo4pkagq9UodJY4hddx6OU96YW+1w7TGhFprxxNigAHGBCNO5J6Q9bGMnMcPdJ+IQlXQrx4i9VAiUVVq+qwSx5A6br2cJ73YX73fY3EAAAICNdYa7K+WNyFyHj/QfSIi/2HRolFKJKpKTZ9V4hhSx62X86QX9Y2+nWhf2/nj8QPdJyLyHxYtGqVEoqrU9FkljiF13Ho5T3qRFu/bifa1nT8eP9B9IiL/4ZoWjVIiUVXNa1p8HbdezpNeONeP1Fnr2i16Bfy3pkXK4we6T0ShimtayEWJRFWp6bNKHEPquPVynvQiPCwca+50TIjzyhwn5/2iO4tkFwdyHj/QfSIi/2HRomFKJKpKTZ+9mmO0/TaIsDBpCbcZGR2PWy/nSS8mDZyErZO3IiPBfUKMCUa/XFos5/Gd+6THp7ttz0jI0NzlzrYWG4oOFmHBrgUoOlgEW4st2F0i8ht+PKQDekjELSkBnnjC8TGOU0YGsHZtx0WF1PaAPs6TnqgtETf/3Xz8T9n/oBWtrm1hCMPPsn+Glbdro+rMfzcfqz5cBbv47rPKcEM48kblaWYMpB/MaWHRoktqDIuj0JL/bj4KyzynAy7OXqz6F309jIH0hUULixbdUWNYHIUWW4sNsb+OdXt3oq1wQzguPn0RkV3U+baZHsZA+sOFuKQ7agyLo9BS/Emx1xd7ALALO4o/UW86oB7GQOQLFi0UVGoMi6PQUvmNb6l/vrYLBj2MgcgXLFooqNQYFkehpW8331L/fG0XDHoYA5EvuKaFgkqNYXEUWvSwHkQPYyD94ZoW0h01hsVRaInsEom8Ud7TAfNG5an6xV4PYyDyRZdgd0DvlMgGkXoMtWWJOMPfcnPdF9lmZDgKFE9hcW3bG42OgoWXOysv0Jkrgea8FFhqxomtxYbiT4pR+U0l+nbri7nD5nZaGATqXMkdg5w+yRlDwH9GlHiypaDjx0MBVFLS8QtrRy/ESh0jPx9Ytcr9e3LCwx0x88FMbVVrWBx1ruRoCXJ356LW+t0PoTHBiDV3rtFUkiwgrQiRE+SmxLmSWkhJ7ZOcMQR83Eo82ZJkzGnRUNGiRACa1GPk5wOFnrOnghY3z7A47So5WoIHtjzQ7osGnd/Zo7UIfF/JCXJT47mS2ic5Ywj4uPkEolosWjRStCgRgCb1GGr9JmKGxWmX89uRr/zf85X0+u3Icha9qvFcSe2TnDEEfNx8AlE1LsTVCCUC0KQeo7jYe8ECOP69WOHsKYbFadf+6v0eX4wAQECgxlqD/dX6mjw5QW5qPFdS+yRnDAEfN59AQg6LlgBQIgBN6jEqfcyU8rWdvzAsTrvqG32bFF/baYWcIDc1niupfZIzhoCPm08gIYdFSwAoEYAm9Rh9fcyU8rWdvzAsTrvS4n2bFF/baYWcIDc1niupfZIzhoCPm08gIYdrWgJAiQA0qcdQ+5oWhsVpj3O9Qp21rt0iS4BrWjpa06KmcyW1T3LGEPBx8wlE1bimRSOUCECTeozISMdlzd7k5Smf18KwOO0KDwvHmjsdk+e8EsTJeb/oziJdFSyAvCA3NZ4rqX2SM4aAj5tPICGHRUuAOAPQMjLctxuN/rsCz9MxMjI6PsbKlY7Lmtv+/oaHd365s90OlJYCb77p+LOzRb02m+O5YsECx582m/Rx+PNcUWBMGjgJWydvRUaC++QZE4y6vdwZcAS5Lc5ejLA2T6FhCOvwcmdAuXN1yXYJ83fNxx1v3IH5u+bjku2Sx7ZS++Rsnxbn/nFLWtc0j2MI+Lj5BBJS+PFQgAU6AE1OKJvURFylAuwYFqddWk/ElaPkaAmeeOcJ1DV+98uXEZ+BtXet9fpCHMhzNfF/J+LtY2+3255zbQ7emvKWX/qkxDFk4ROI6jCnRYNFSyAxwI4oONQYFOepmHDqrKhQyzFIP1i0sGhxYYAdUXCoMSjuku0SYgtiO213cclFxETGqPYYpC9ciEsuDLAjCg41BsUt/stiv7YL1jGIOsOiRaMYYEcUHGoMivvy3Jd+bResYxB1hkWLRjHAjig41BgU1797f7+2C9YxiDrDNS0axQA7ouBQY1Ac17SQGnFNC7kwwI4oONQYFBcTGYOca3O8tsm5NueqigkljkHUGb7TIpHUKAAlclraZqhkZjqKCX9lKknNggnlnBYl8kpsLTYUf1KMym8q0bdbX8wdNtctfVULfZLTLznHCKSSoyXI3Z3rtig3MyETRXcWeb3c+ZLtEhb/ZTG+PPcl+nfvj8LbCr2+0KstQ0XuMSRT25OtUnQ07oC8fguJKioqxMiRI0VcXJy4+eabxRdffNHpPrt37xb9+/cXsbGx4sc//rG4cOGCz8draGgQAERDQ4PUrvrdtm1CGI1COD4scdyMRsd2f7SXq6VFiH37hNi0yfFnS4t/H3/xYiHCwtzHERbm2N6RbduESE93b5+e7n3cSp2rQNpWsU0YVxkFnoHrZlxlFNsq/DeIxXsXi/Bnw92OEf5suFi8t+PJUGOf5PRLzjGU0GJvEftO7BObPtsk9p3YJ1rs3n/5ct7McRuD85bzZk6H7eWcp7Bnw9zahz0b5te5EEKIi00Xxbyd88QP//BDMW/nPHGx6aLXcUum1ifbQNPZuAPx+i35nZYhQ4Zg8uTJmDlzJpYuXYrjx4/jvffe89jeYrGgV69eWLFiBe68805MmTIF48aNw/Lly306nlreaZEasqZE8JsSpIbFyRm3Hs6VEmFj+e/mo7DM82S0jY9XY5/k9EvOMdRIajCbEudJjSF5Iftkq8NxBz1c7vz585gwYQLee+89REZGYteuXXjsscdQ7+Xa2A0bNuCFF17AkSNHAAAlJSVYuHAhTp486dMx1VC0SA1ZUyL4TQlSF9bKGbcezpUSYWNSv1lYjX0CpJ8rOcdQI6mLWJU4T2oMyQvZJ1udjjvoC3GTk5Oxf/9+REZGwmazYcuWLRgyZIjXfQ4cOIDs7GzX/REjRqC6uho1NTUdtm9qaoLVanW7BZvUkDUlgt+UIDUsTs649XCulAgbK/6k2OsLEgDYhR3FnxSrtk9y+iXnGGokNZhNifOkxpC8kH2yDdVxyyD76qHY2Fi88847ePHFF722O336NFJSUlz3u3fvDgA4c+ZMh+0LCgqQmJjoumVmZsrtot9IDVlTIvhNCVLD4uSMWw/nSomwscpvfJsMZzs19knK8Zzt5BxDjaQGsylxntQYkheyT7ahOm4ZZBctH330EYYOHYonnnii07ZXfgLl/Luh7TW0/7FkyRI0NDS4bp7ekVGS1JA1JYLflCA1LE7OuPVwrpQIG+vbzbfJcLZTY5+kHM/ZTs4x1EhqMJsS50mNIXkh+2QbquOWQdKalrNnz6K2ttb1kdDhw4cxdOhQWCwWJCYmdrjPT37yE7S2tuL3v/89AKC2thaZmZmora1FRkZGp8dU05oWX0PWlAh+U4LcNS1Sxq2Hc6VE2JjcNS1q6hMg/VyF+pqWQJ4nNYbkheyTrU7HHfQ1LYcPH8Y999zjuu98tyQszPPDmM1mlJWVue4fPHgQJpPJp4JFLaSGrCkR/KYEqWFxcsath3OlRNhYZJdI5I3yPhl5o/JcL0hq7JOcfsk5hhpJDWZT4jypMSQvZJ9sQ3Xccki5Pvr8+fMiOTlZvPjii6KmpkZMnz5dmM1m1/XYNput3T4Wi0UkJiaK4uJiceLECTF8+HDx85//3Odjqj2nJTNT2iX03tqr1eLFQoSHu48jPNx7TovUcevhXHWUd5G5KlN1OS3B7pOcfqk1p0Uqf+S0+Ps8KfEzIlmoPtnqbNyqyGkpLS1Fbm4ujh8/juzsbLz88svo1asXTCYTioqKMHHixHb77N27F/PmzUNdXR0mTJiAV199FbGxnb9VCqjj46ErSQ0ftNkcV9dUVjrWfsydq80Ye6njkBPSqOJgR58pkT4rNVFViSRZOceQuk8gk2Tl7iPnGIGePyXSiRWhRDKsGp90mIjrFWP8A6ijiH2j0fGunhayjkh9OoqONyYYsebONR2GgEltr5RAj0POuNV4btU6f7rAJ+iAY9GioaJFA2GFpDFS00tVmXYqo19KjFuN51at86cLfIJWBIsWjRQtGgkrJA2Rml6qyrRTBH4ccsatxnOr1vnTBT5BKyboVw+Rb0I4rJACRGp6qSrTThH4ccgZtxrPrVrnTxf4BK1pLFoCIITDCilApKaXqjLtVMLx5I5DzrjVeG7VOn+6wCdoTWPREgAhHFZIASI1vVSVaacSjid3HHLGrcZzq9b50wU+QWsai5YAMJsdH4l6+KYCGAxAZqajHZEvzD3NMCYY24WAORlgQGZCJsw9zbLaKyXQ45AzbjWeW7XOny7wCVrTWLQEQCiHFVJgSE0vVWXaqYx+KTFuNZ5btc6fLvAJWtNYtATIpEmOq+bafluB0cir6UieSQMnYevkrUiPT3fbnhGf0eHlr672Xd3bp8end3q5rL3VjtKqUrz5zzdRWlUKe6uXL6CSOY6MBPdfDmOC0es40rq6v12f3rXjcUg9T3L2kdqnK/l6bqWep6sRyPlWJblP0HY7UFoKvPmm409vX8ymFDX2KYC6BLsDejZpEpCTo9qwQtIoTx8ZdORg7UHUX3BfUFj/bT0O1h70W8iaHJMGTkLOtTk+p7AerD2IMxfOuG07feG013FIOU9y9pHTJ6nnVup5kiNkA+ykPkGrMYxOjX0KMOa0EGmE1LCx/HfzUVhW6PHxFmcvxsrbV17VMZQgdRxKhMvp5dyqsU+qpMYwOjX2qQ2Gy7FooRAlNWzM1mJD7K9jYRee3yoON4Tj4tMXXd9Lo8ZAM6njUCJcTi/nVo19UiU1htGpsU8dYLgcUYiSGjZW/Emx1xdVALALO4o/KZZ9DCVIHYcS4XJ6Obdq7JMqqTGMTo19UgiLFiINkBo2VvlNpU/tr2ynxkAzqeNQIlxOL+dWjX1SJTWG0amxTwph0UKkAVLDxvp26+tT+yvbqTHQTOo4lAiX08u5VWOfVEmNYXRq7JNCuKaFSAOc6w/qrHXtFk0C/l134esxlCB3TYuUMYTquVVjn1TJuX6krq79olcguGta1NSnDnBNC1GIkho2FtklEnmj8rw+Zt6oPNeLqpxjKEHqOJQIl9PLuVVjn1RJjWF0auyTQli0UMjQegaTK2ws3j0QKyOh4wC0lbevxOLsxQg3uD9xhRvCO7wk98pjyAlNk8rXQDOp45ATyqbkuVUiLM5XauyTKqkxLVSNfVIAPx6ikKCXDKaSoyV44p0nUNdY59qWEZ+BtXet9fgCY2uxofiTYlR+U4m+3fpi7rC5bu8CtDX8d8Px8amP222/Kf0mfPSTj65+EJAXaCZ1HPZWu6RQNqnntuRoCRbsWoBT355ybUvvmo7f3P2bThNxAxkWJ4ca+6RKdrv60kLV2Kf/YE4LixaSQQMZTD5RIgjMU8Hi5I/CRY2BZlL7pMYxEKkNixYWLSSRRjKYOqVEENi3l79F/Ir4Tts1PtWIrtFdZR1DjYFmUvukxjEQqREX4hJJpJcMJiWCwKa/Nd2v7TqixkAzqX1S4xiIQgWLFtI1vWQwKREEVnnex9A0H9t1RI2BZlL7pMYxEIUKFi2ka3rJYFIiCKxvso+haT6264gaA82k9kmNYyAKFSxaSNfMZsealbZRBk4GA5CZ6WinZuaeZhgTjO3yNJwMMCAzIRPmnvIH8sbEN/zariNKjCPQfVLjGIhCBYsW0jW9ZDApEQTWNborbkq/yWubm9Jvkr0IF1BnoJnUPqlxDEShgkUL6Z7aM5h8DVmTGwTm6+MDwEc/+chj4eKvnBYlxhHoPjGUjVRD66mZEvGSZwoZasxgkhOyJiUITM7jlxwtwfyd81F/4buFpGlxaXjxnhf9nogbyHEEuk9y2hP5lcpTM5nTwqKFdCTQAWVyHl+NoWlq7BNR0GkgNZNFC4sW0olAB5TJeXw1hqapsU9EQaeR1EyGyxHpRKADyuQ8vhpD09TYJ6Kg00tqpgwsWoiCINABZXIeX42haWrsE1HQ6SU1UwYWLURBEOiAMjmPr8bQNDX2iSjo9JKaKQOLFqIgCHRAmZzHV2Nomhr7RBR0eknNlIFFC1EQBDqgTM7jqzE0TY19Igo6vaRmysCihShIAh1QJufx1RiapsY+EQWd2lMzA0TyJc/Hjx/HI488gk8//RQ/+MEP8Prrr6NXr15e90lNTcWZM2dc93/wgx/gk08+8el4vORZm5QIclNjWJwcthYbij8pRuU3lejbrS/mDpuLyC6RHttLDTST+vhyjqEEJfok51ypjRrnjgJIxU+Eqshpue2225CWlobnnnsOeXl5aGpqwo4dO7zuEx0djfLycqSmpgIAunTpgq5dffv+EhYt2qNESKPKgyB9JjXpNdDtQ1n+u/lY9eEq2MV3MejhhnDkjcrDyttXBrFnvuN8k5oEvWix2WyIjo7G559/jqysLOzatQtTp05FQ0ODx32ampoQHR2NpqYmREZK/x8LixZtUSKkUQNBkD6RmvQa6PahLP/dfBSWFXr898XZi1VfuHC+SW2CHi7X3NyMlStXonfv3gCAc+fOISYmxus+FosF0dHRmDp1KmJiYnDLLbegrq5Ofo9Jtex2x7sfHZXBzm1PPnl13+elxDGUYG+1I3d3brsXGACubU/uftL1pYCBbh/KbC02rPpwldc2qz5cBVuLTaEeScf5plAhqWiJi4vDokWLEBMTg+bmZqxduxbTp0/3uo/FYsHly5cxbtw4VFRUICwsDIsWLfLYvqmpCVar1e1G2qBESKNegiClJr0Gun0oK/6k2O0joY7YhR3FnxQr1CPpON8UKrrI2amlpQUPPfQQwsLCsGzZMq9t+/Tpg1OnTiHtPyE3jz/+OHJzcz22LygowLPPPiunWxRkSoQ06iUIUmrSa6Dbh7LKbyr92i4YON8UKiRf8tza2oopU6bgq6++wjvvvNPpx0MRERGuggUAkpOTvb57smTJEjQ0NLhuNTU1UrtIQaJESKNegiClJr0Gun0o69utr1/bBQPnm0KF5KJl2bJl+Oqrr/DXv/4V3bp167T9unXrMHbsWNf96upqmEwmj+2joqKQkJDgdiNtUCKkUS9BkFKTXgPdPpTNHTYX4Qbvl4iGG8Ixd9hchXokHeebQoWkouX06dNYvXo11q9fD8CxXsVisaC1tRVWqxXNzc3t9hkzZgzKysqwY8cOHDt2DGvWrMHDDz/sl86TuigR0qiXIEipSa+Bbh/KIrtEIm9Untc2eaPyVJ3XwvmmUCGpaNmzZw+sViuys7ORnJzsulVXV2PQoEHYuXNnu32uv/56vPTSS5g3bx7MZjNuu+02LFy40G8DIHXxFNKYkeG/S5H1EgTpTHpNj093256RkNHh5alSk2GZJOu7lbevxOLsxe3ecQk3hGvicmeA802hQXK4nNKY06I9JSXAE08AV17ZnpEBrF3r34JCxUGQPst/Nx//U/Y/aEWra1sYwvCz7J95fKGUmnjKhFTfMRGXyH+CHi4XDCxatEUvwW9K0EOgGRGRJyxaWLSomt0OmEyec1QMBsdHOCdOaO8dEX+ztdgQ++tYr/kg4YZwXHz6oub+p09EBKggEZfIG70EvylBD4FmRERKY9FCfqOX4Dcl6CHQjIhIaSxayG/0EvymBD0EmhERKY1FC/mNXoLflKCHQDMiIqWxaCG/0UvwmxL0EGhGRKQ0WV+YSIGl5fwRZ/Bbbq77olyj0VGweLvcWcvjlsN5OfOqD1e5LcoNN4Qjb1QeL3cOAmacEKkbixaVKSnp+AV/zRrt5JtMmgTk5EgrQPQwbjlGGkfie3Hfw6lvT7m2fS/uexhpHBnEXoWmkqMlyN2di1rrdz+ExgQj1ty5hmmyRCrBnBYVCdVgtpAd99ESPLDlAQi4D9z5XTGMXlcO54LI/xgup+OiJVSD2UJ23K12mNaY3P5XfyUDDDAmGHEi9wQ/nggwzgVRYDBcTsdCNZgtZMddvd/jiyQACAjUWGuwv1pnA1chzgWRdrBoUYlQDWYL2XE3+jYgX9uRfJwLIu1g0aISoRrMFrLjjvdtQL62I/k4F0TawaJFJUI1mC1kx93TDGOC0bXQsy0DDMhMyIS5p84GrkKcCyLtYNGiEqEazBay4w4Lx5o7HQNv+2LpvF90ZxEXfiqAc0GkHSxaVMQZzJaR4b7daNTvZb9ACI974CRsnbwVGQnuAzcmGEPiEltbiw1FB4uwYNcCFB0sgq3F5tfHt7faUVpVijf/+SZKq0phb/X8rdqhPhdEWsFLnlUo1JJhnUJ23CGYwpr/bn5Ak4DlBsWF4lwQBQpzWkKkaCHSs/x381FYVujx3xdnL76qwoVBcUTqwKKFRQuRptlabIj9dazbOyxthRvCcfHpi7K+LJJBcUTqwXA5ItK04k+KvRYsAGAXdhR/Uizr8RkUR6RvLFqISDGV31T6tV1bDIoj0jcWLUSkmL7d+vq1XVsMiiPSNxYtRKSYucPmItzgfS1JuCEcc4fNlfX4DIoj0jcWLUSkmMgukcgblee1Td6oPFmLcAEGxRHpHYsWIlLUyttXYnH24nbvuIQbwq/6cmeAQXFEesZLnokoKGwtNhR/UozKbyrRt1tfzB02V/Y7LB1hUBxRcDGnhUULERGRJjCnhYiIiEIWixYiIiLSBBYtREREpAksWoiIiEgTWLQQERGRJrBoISIiIk1g0UJERESa0CXYHSBystuB/fuB+nogLQ0wm4FwZoEREdF/SH6n5fjx4xg9ejTi4+MxZswYnDx5stN99uzZgwEDBiAuLg5TpkzBxYsXZXWW9KukBDCZgFtvBR580PGnyeTYTkREBMgoWn7605+iZ8+e+Pzzz9G9e3fMmzfPa3uLxYLJkycjLy8PR44cQVVVFZYvXy67w6Q/JSXAAw8AtbXu2+vqHNtZuBARESAxxt9msyE6Ohqff/45srKysGvXLkydOhUNDQ0e99mwYQNeeOEFHDlyBABQUlKChQsX+vQODcAYf72z2x3vqLQtWJwMBsBoBE6c4EdFRERaEvQY/+bmZqxcuRK9e/cGAJw7dw4xMTFe9zlw4ACys7Nd90eMGIHq6mrU1NR02L6pqQlWq9XtRvq1f7/nggUAhABqahztiIgotEkqWuLi4rBo0SLExMSgubkZa9euxfTp073uc/r0aaSkpLjud+/eHQBw5syZDtsXFBQgMTHRdcvMzJTSRdKY+nr/tiMiIv2SdclzS0sLHnroIYSFhWHZsmWdtr/yEyjn3w0GQ4dtlyxZgoaGBtfN0zsypA9paf5tR0RE+iX5kufW1lZMmTIFx48fx1/+8pdOPx5KS0vD2bNnXffPnTsHAEhNTe2wfVRUFKKioqR2izTKbHasWamrc3wU1JZzTYvZrHzfiIhIXSS/07Js2TJ89dVX+Otf/4pu3bp12t5sNqOsrMx1/+DBgzCZTMjIyJB6aNKh8HBgzRrH39u++ea8X1TERbhERCSxaDl9+jRWr16N9evXA3BczmyxWNDa2gqr1Yrm5uZ2++Tk5KC+vh7r169HVVUVCgsLMW3aNP/0nnRh0iRg61agbR1rNDq2T5oUnH4REZG6SCpa9uzZA6vViuzsbCQnJ7tu1dXVGDRoEHbu3Nlun8TERGzZsgWrVq1CVlYWevfujSVLlvhtAKQPkyYBVVXAvn3Apk2OP0+cYMFCRETfkZTTEgzMaSEiItKeoOe0EBEREQULixYiIiLSBBYtREREpAksWoiIiEgTWLQQERGRJrBoISIiIk1g0UJERESawKKFiIiINIFFCxEREWkCixYiIiLSBBYtREREpAksWoiIiEgTWLQQERGRJrBoISIiIk1g0UJERESawKKFiIiINIFFCxEREWkCixYiIiLSBBYtREREpAksWoiIiEgTWLQQERGRJrBoISIiIk1g0UJERESawKKFiIiINIFFCxEREWkCixYiIiLSBBYtREREpAksWoiIiEgTWLQQERGRJrBoISIiIk1g0UJERESawKKFiIiINIFFCxEREWkCixYiIiLSBBYtREREpAmSi5b6+nqMHj0a5eXlPrVPTU2FwWBw3YYNGyb1kEREREToIqXx7Nmz8fLLL0s6gMViwdGjR5Gamuo4YBdJhyQiIiICIPGdluXLl+PEiRM+t29qakJTUxP69OmDpKQkJCUloWvXrpI7SURERCSpaElJSYHJZPK5vcViQXR0NKZOnYqYmBjccsstqKur87pPU1MTrFar242IiIgooAtxLRYLLl++jHHjxqGiogJhYWFYtGiR130KCgqQmJjoumVmZgayi0RERKQRBiGEkLyTwYDDhw9j8ODBXts1Nzfj3//+N9LS0gAAmzdvRm5uLk6fPu1xH+dHSk5WqxWZmZloaGhAQkKC1K4SERFREFitViQmJvr19Tugq2IjIiJcBQsAJCcnd/pxT1RUFKKiogLZLSIiItKggH48tG7dOowdO9Z1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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# visualize result\n",
    "\n",
    "cat1 = data[np.where(labels==0)]\n",
    "cat2 = data[np.where(labels==1)]\n",
    "cat3 = data[np.where(labels==2)]\n",
    "\n",
    "plt.scatter(cat1[:,0], cat1[:,1], color='green')\n",
    "plt.scatter(cat2[:,0], cat2[:,1], color='red')\n",
    "plt.scatter(cat3[:,0], cat3[:,1], color='blue')\n",
    "plt.title('Hierarchical clustering with k=3')\n",
    "plt.xlim(4, 8)\n",
    "plt.ylim(1, 5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "69e5ab71",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi0AAAGvCAYAAACXeeU8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABKQUlEQVR4nO3df3xT9b0/8Fda2tKW/gBa1x9pCT+VThkwBOQaQdiuP0CKlTFQfviDDUSw0gFe/G5DmaxCvaWggHNOdDK4MCh6Bwpsjk4EmYowJ2Wo0NIfFGTYNFWgadPP94/chKZp0pxDcnLOyev5eORRc/o5+Xw+56TkbfI5rxiEEAJEREREKhcR6gEQERER+YNFCxEREWkCixYiIiLSBBYtREREpAksWoiIiEgTWLQQERGRJrBoISIiIk1g0UJERESawKKFiIiINIFFCymmrKwMBoMBe/bscdtuMBhQUlLSYVutGjNmDJ5++mm/2ppMJrz22mtBHY/BYEBZWVnQHr+yshIGgwGVlZVB60MJWpmH3L+PQMzvtddeg8lkkr2/08aNGzFgwAAkJiZi3LhxOHHixDU/JukfixZSpaFDh+KDDz4I9TAUsXPnTowfPz7Uw1C9kpISHDt2LKh9pKen44MPPkB6enpQ+7lWnf19vPnmm3jzzTeVG5BE+/btw9y5czF//nzs2LEDNpsN99xzD5qbm0M9NFK5LqEeAFFHEhMTMXLkyFAPQxFDhgwJ9RA0oaSkBMnJyRg8eHDQ+oiJidHE866zvw9nwTJp0iRlBtSG3W6Ht6+0i4iIQEREBDZs2IC8vDw8/vjjAICoqCjcfvvtKC8vx/e+9z0lh0saw3daiIgoYMaNG4eoqKgObw8//DAA4JFHHsGSJUtc+9hstlANlzSGRQsprrW1FS0tLa5bR3x9Zn/mzBnce++9SEhIQFZWFn7xi1+4PY5z3/r6epSUlOCGG27AwoUL3R7jD3/4A3JychAXF4cbbrgBW7Zscfv9gw8+iEmTJuH8+fOYOXMmUlNTceTIEdfvbTYbFi1ahOuuuw7JycmYMGECTp065THWV199FSaTCYmJibj//vtx5coVjzbe1rT408fq1avRp08fxMXFYfDgwfjLX/7S4TGTSwiB5557DllZWUhISMDo0aPdjkNnOlr/0P7cNjU1YcGCBcjIyEB8fDzMZrPrYyDnGgyDwYAzZ87goYcect1vKxDPibb9tV/z4dz/3LlzuOeeexAfH49+/fp5rM9at24dsrKykJqaiieffBLTpk1DUlKSX8cqIyMDzz//PADgpptuwqhRowAAy5Ytw/XXX+/zGDqZTCYYDAa8/vrreP31113Hqv16pm+++QYzZ85EYmIijEYjXn/9db/G2JFt27YhJiYGb731FgDgN7/5DT766KMOb851XhMmTMCQIUPQ2tqKL774As8++yz69u2LG2+8UfY4KDzw4yFS3LWs37DZbPjP//xPpKam4o9//CPq6uqwYMECRERE4JlnnnFr+9RTT6GsrAwPP/yw21vpBw8exIwZM7Bw4ULcc8892L9/P2bOnIkRI0agT58+rnbffPMNzGYzBg8ejGXLliE7O9v1u1mzZmHv3r1YuXIlsrOz8atf/Qp33nknysvLERUVBQB466230NjYiKKiIly8eBHz58/HLbfcggULFvg118762Lx5MwoKCrBy5UoMHz4cW7duxeTJk1FdXY2EhATZx7j9MSwpKcGvfvUrDBkyBC+88ALuuOMOnDx5Ej179gxIH4WFhXj11VexYcMGpKamYu3atfjxj3+MkydPutaYAMC9996L2bNnezx/AvGc8Nddd92F0aNHY/78+SgsLMTMmTNx7tw5RERE4P3338fChQvx8ssvIyEhAbNnz8ZDDz2EnTt3+vXYw4YNQ3l5OWw2G65cuYJLly5BCIHy8nIMGzbMr8fYuXMnmpqa8Ktf/QoA8Itf/AIAkJOT49ZuxowZyMnJwR//+Ef87ne/w5w5czB+/HikpKRIOBrAu+++i1mzZuGVV15Bbm4uAHgUWL7s27cPd911F3r27In9+/cjMjJSUv8UhgSRQvbv3y8AiLVr14qPPvrIdQMgVq9e3WHb9l577TURFRUlampqRHNzs2hubhb5+fmiV69eHvsOGjRIWK1Wj8c4cuSIePnll0VLS4sQQogLFy6IqKgosXXrVlebWbNmCQDi6aef9tj/888/FwDExo0bXdv+8Y9/iPvuu09UV1cLIYQYPXq0iI2NFWfOnHG1ufvuu8Xs2bM9Hq9Xr15uj+VvH2VlZWLTpk1uvwcg/v73v3v0AUDs37/fY7svjY2NIiYmRixbtsy1ra6uTtx3333ik08+cWtbUVEhAIiKigq37Rs3bnQ7N0J4nttZs2aJnJwc1/2z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eP7553H8+HEAQGlpKRYuXOjXOzQAY/x1z253vKPSvmBxMhgc33RXUcGPioiINCTkMf7Nzc1YtWoVevfuDQC4ePEiYmNjfe5z8OBBjBo1ynV/xIgRqKqqQnV1dYftm5qaYLVa3W6kYwcOeC9YAEAIoLra0Y6IiMKapKIlPj4eixYtQmxsLJqbm7F27VrMmDHD5z7nzp1DSkqK637Pnj0BAOfPn++wfWFhIZKSkly3rKwsKUMkramrC2w7IiLSLVmXPLe0tOCBBx5AREQEli9f3mn7tp9AOf/bYDB02Hbp0qVoaGhw3by9I0M6kZ4e2HZERKRbki95bm1txdSpU3H69Gn85S9/6fTjofT0dFy4cMF1/+LFiwCAtLS0DtvHxMQgJiZG6rBIq8xmx5qV2lrHR0HtOde0mM3Kj42IiFRF8jsty5cvx5dffom//vWv6NGjR6ftzWYzDh065Lp/+PBhmEwmZGZmSu2a9CgyElizxvHf7d99c94vKeEiXCIikla0nDt3DqtXr8aGDRsAOC5ntlgsaG1thdVqRXNzs8c+ubm5qKurw4YNG1BZWYmioiJMnz49MKMnfcjLA7ZvB9oXskajY3teXmjGRUREqiKpaNm7dy+sVitGjRqF7t27u25VVVUYNGgQdu/e7bFPUlIStm3bhuLiYuTk5KB3795YunRpwCZAOpGXB1RWAvv3A5s3O35WVLBgISIiF0k5LaHAnBYiIiLtCXlOCxEREVGosGghIiIiTWDRQkRERJrAooWIiIg0gUULERERaQKLFiIiItIEFi1ERESkCSxaiIiISBNYtBAREZEmsGghIiIiTWDRQkRERJrAooWIiIg0gUULERERaQKLFiIiItIEFi1ERESkCSxaiIiISBNYtBAREZEmsGghIiIiTWDRQkRERJrAooWIiIg0gUULERERaQKLFiIiItIEFi1ERESkCSxaiIiISBNYtBAREZEmsGghIiIiTWDRQkRERJrAooWIiIg0gUULERERaQKLFiIiItIEFi1ERESkCSxaiIiISBNYtBAREZEmsGghIiIiTWDRQkRERJoguWipq6vD6NGjcezYMb/ap6WlwWAwuG7Dhg2T2iURERERukhpPGfOHLz88suSOrBYLDhx4gTS0tIcHXaR1CURERERAInvtKxYsQIVFRV+t29qakJTUxP69OmD5ORkJCcno1u3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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sk = cluster.AgglomerativeClustering(3)\n",
    "sk.fit(data)\n",
    "labels_ = sk.labels_\n",
    "# visualize result of sklearn\n",
    "\n",
    "cat1_ = data[np.where(labels_==0)]\n",
    "cat2_ = data[np.where(labels_==1)]\n",
    "cat3_ = data[np.where(labels_==2)]\n",
    "\n",
    "plt.scatter(cat1_[:,0], cat1_[:,1], color='green')\n",
    "plt.scatter(cat2_[:,0], cat2_[:,1], color='red')\n",
    "plt.scatter(cat3_[:,0], cat3_[:,1], color='blue')\n",
    "plt.title('Hierarchical clustering with k=3')\n",
    "plt.xlim(4, 8)\n",
    "plt.ylim(1, 5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "a45a0c79",
   "metadata": {},
   "outputs": [],
   "source": [
    "# kmeans\n",
    "\n",
    "class MyKmeans:\n",
    "    def __init__(self, k, n=20):\n",
    "        self.k = k\n",
    "        self.n = n\n",
    "        \n",
    "    def fit(self, x, centers=None):\n",
    "        # 第一步，随机选择 K 个点, 或者指定\n",
    "        if centers is None:\n",
    "            idx = np.random.randint(low=0, high=len(x), size=self.k)\n",
    "            centers = x[idx]\n",
    "        #print(centers)\n",
    "        \n",
    "        inters = 0\n",
    "        while inters < self.n:\n",
    "            #print(inters)\n",
    "            #print(centers)\n",
    "            points_set = {key: [] for key in range(self.k)}\n",
    "\n",
    "            # 第二步，遍历所有点 P，将 P 放入最近的聚类中心的集合中\n",
    "            for p in x:\n",
    "                nearest_index = np.argmin(np.sum((centers - p) ** 2, axis=1) ** 0.5)\n",
    "                points_set[nearest_index].append(p)\n",
    "\n",
    "            # 第三步，遍历每一个点集，计算新的聚类中心\n",
    "            for i_k in range(self.k):\n",
    "                centers[i_k] = sum(points_set[i_k])/len(points_set[i_k])\n",
    "                \n",
    "            inters += 1\n",
    "\n",
    "        \n",
    "            \n",
    "        return points_set, centers\n",
    "        \n",
    "m = MyKmeans(3)\n",
    "points_set, centers = m.fit(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "e3fbfe73",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# visualize result\n",
    "\n",
    "cat1 = np.asarray(points_set[0])\n",
    "cat2 = np.asarray(points_set[1])\n",
    "cat3 = np.asarray(points_set[2])\n",
    "\n",
    "for ix, p in enumerate(centers):\n",
    "    plt.scatter(p[0], p[1], color='C{}'.format(ix), marker='^', edgecolor='black', s=256)\n",
    "        \n",
    "plt.scatter(cat1_[:,0], cat1_[:,1], color='green')\n",
    "plt.scatter(cat2_[:,0], cat2_[:,1], color='red')\n",
    "plt.scatter(cat3_[:,0], cat3_[:,1], color='blue')\n",
    "plt.title('Hierarchical clustering with k=3')\n",
    "plt.xlim(4, 8)\n",
    "plt.ylim(1, 5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "9bca2d38",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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H//4RyxZsgQAMH78eEyfPh3jx48HABw6dAg//elP27zWunXrsGfPHgwePLjN99rbV75ce+216NSpEyoqKnDgwAFMnToVBw4cQJ8+fWAwGNwupXjTs2dP9OzZ03WMhw4d6nbmzam9n01/eDseQgjYbDav60VHu7+NrFq1Cn/605/w4osv4oYbbsCsWbMk9YPIFxYtpApPPvkkLBYLLl68CIvFgvj4eNf3evbsidjYWNflkPT0dABwPXf+8Xb+QW+puroa/fv3x5133ony8nI8/PDD2LNnD7755hsAcLuENGrUKLfX6NmzJw4ePOjWx6KiInz77bcYNWoU7rjjDklv9J7Y7Xa353PmzMGMGTNw880346abbsKECRNw++23S3rNqKgozJ07120cLS+rfO9738PmzZvx3Xff4cKFC/jmm28wcOBASdvwZ188//zzMJvNOHv2LE6dOoWePXv6/foHDhxAU1OTx4mrVqsVsbGxmDp1KtatW4cf/ehH2LNnD44dO+bxFtwnnnjCY8ECtL+vfImJicGQIUNQUVGBr776CkuXLsWf/vQnZGdnY/jw4QG9Jb29n01/eDseH3/8savw86SystKtkBo+fDiGDx+OTz75BC+88AKLFgoozmkhVdDpdNi/fz8GDhyIZ555RvL6er0en332WZvr8c43vfvuuw+PPvookpOT8ctf/hL/+Mc/2rxGdna2z20UFhbiq6++Qm5uLg4dOoSxY8eiqKhIcl9bqqmpcXuen5+Po0ePYubMmTh16hSmTJmCe+65R9JrpqWluRV9rV133XU4ffo0srKycO211yIvLw+5ubmStuHPvjCbzfjkk08wZcoUFBYWSnp9ADAajR7nWERHR8Nms2HChAl49tlnkZ2djRUrVuD999/3+Dqeilmn9vZVe66//nr885//xKVLlzBo0CDU1tbiwIEDGDFihOzX9KS9n01/eDse/sxpWbJkCe666y631+vXrx/q6uo63C+illi0kCr89re/Re/evfHCCy/g9ddfx5dffun3uoMHD4bNZkOnTp0wYsQIjBgxArGxsVixYgVMJhPMZjPWr1+PF154AcuWLcOUKVNw+vTpNq+j1+u9bqOhoQGPP/44DAYD5s6diw0bNmD+/Pn4/e9/73c/o6OjcfHiRddzu92OjRs3urVZsGABLBYLZs2ahTfeeAMlJSXYsGEDzp8/7/d2fI0DAObOnYvS0lIcP34cJ06cwNq1ayWdFfB3X/zyl7/EgAEDsHTpUuzYsQObNm3yexuDBw92FVbOY2qxWPDyyy+jubkZX3/9Nf7+97/j9ddfx+LFi3HnnXeitrbW79d3am9ftWfEiBEoLy9H//79AQB9+vTBpk2bJBctnTp1AgCvE5U72k/A+/FITEx07WNPj9jYWMTFxeGjjz7ChQsXXK/37bffol+/fh3uF1FLLFpIFZxzWMaNG4fbb79d0v/Mx48fjzFjxmD69OnYuHEjtmzZggcffBBfffUVUlJSEB8fj/j4eLz77rvYsWMHli9fjmnTpgGA35cCEhISsH37dsydOxfbt2/HBx98gA8++EDSH+0hQ4Zg//792LNnDy5cuIA5c+bgzJkzbm2+/PJLzJ07F5s3b8aHH36I0tJSdO/eHQaDwe/ttCc+Ph6vvfYaDh8+jJqaGnzzzTd+7wfA/33hPKb9+/fHrFmzMH/+fL+3c++99yIzMxNTpkzBpk2bUF5ejlmzZsFkMiE2NhbdunWDTqfDunXrsGPHDvz85z/HvHnzAPh/TAPh+uuvh9VqxdVXXw0AuPrqq2G1WiUXLSkpKcjIyMDKlSuxc+dOrFmzRvLln/Z05HhMnz4dUVFReOCBB/DXv/4VixYtwr59+/DUU08FtI9ELFpIdZ5//nns3LnT6+l+T8rKyjB06FDMmjUL9913H6666ips2bIFOp0OsbGxWL9+PY4ePYpJkyahtLQUr7/+OqKjo7Fr1y6/t/H+++/DarVi+vTpyM/PR8+ePbFu3Tq/1//BD36ARx55BJMmTUJ2djbi4+Px3HPPubVZu3Yt0tLS8NBDD+EHP/gBLl26hD//+c+Iigrcr/J9992Hv/3tb5g+fTpGjRqFgQMHolevXkHdF4sXL0ZtbS1WrVrl1+vHxcVh+/btrtupZ8+ejVtvvRVvvfUWACAzMxO///3v8de//hWTJk3C3//+d6xZswYAJI2jowYOHIguXbpgwIABABxFS/fu3V23MEtRWlqKf/zjH7j99tuxdOnSoBZfUo9Hnz598PHHH+PcuXPIy8vDn/70J7zyyiucz0IBpxOeZqYRUUQ6evQoBg8ejDVr1iA7Oxs6nQ51dXUoKipCXl4eSkpKwt1FIopgLFqIyKW5uRkLFy7Ee++9hxMnTqC5uRmpqam4/fbb8atf/cp1+zcRUTiwaCEiIiJVkHwhfNSoUdDpdK5HcnJyu+ts27YNAwYMQOfOnTFt2jS37AsiIiIif0guWkwmE7Zt24bz58/j/PnzbT7Lw1P7/Px8FBYW4uDBg6iqqsLSpUtld5iIiIgik+SixWw2o2/fvujatSu6du3abvT2u+++C6PRiEcffRRZWVkoKirC22+/LbvDREREFJlknWlZtGgR4uPjcd1117WbFfDpp59i9OjRrucjR45EdXV1m6RPIiIiIl8kffaQ1WrF5cuXcdVVV6GiogI///nPMWvWLOzZs8frOidPnsS1117ret6jRw8AwKlTp5CRkdGmfWNjIxobG13P7XY7zp07hx49egT0szqIiIgoeIQQuHDhAtLS0gKWJSWpaImJiUFtba3rA+kKCgowatQoXLp0yefnc7S8Qcn5b28FyLJly1yf0kpERETqVlNT4/HDTeWQVLTodDpXwQIA3bp1AwBcuHDBa9GSmprqFkV+9uxZAI5Yak8WLlzoFtFuNpuRmZmJmpoaSR9dT0REROFjsViQkZGBxMTEgL2mpKJl06ZNKCgowLFjxwAA1dXVSEhI8PmR8jk5OVi2bJnr+d69e5GVleVW/LQUFxeHuLi4NsuTkpJYtBAREalMIKd2SLrINHLkSJw+fRqvvfYaKisrsWzZMjzwwAPQ6XSwWCxoampqs05ubi7q6+vx6quvoqqqCsXFxZgxY0bABkBERESRQVLR0rNnT7zzzjsoLi7GsGHDkJ6ejuXLlwNwfELt5s2b26xjMBhQWlqKkpISDBo0CH379sXChQsD03siIiKKGIqP8bdYLDAYDDCbzbw8REREpBLBeP8O3OfZExEREQURixYiIiJSBRYtREREpAosWoiIiEgVWLQQERGRKrBoISIiIlVg0UJERESqwKKFiIiIVIFFCxEREakCixYiIiJSBRYtREREpAosWoiIiEgVWLQQERGRKrBoISIiIlVg0UJERESqwKKFiIiIVIFFCxEREakCixYiIiJSBRYtREREpAosWoiIiEgVWLQQERGRKrBoISIiIlVg0UJERESqwKKFiIiIVIFFCxEREakCixYiIiJSBRYtREREpAosWoiIiEgVWLQQERGRKrBoISIiIlVg0UJERESqwKKFiIiIVIFFCxEREakCixYiIiJSBRYtREREpAosWoiIiEgVZBUt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qLQuWJx0Oscn3VVW8lIREZGKhD3Gv6mpCcuXL0ffvn0BAGfPnkV8fLzPdT799FOMHj3a9XzkyJGorq5GTU2Nx/aNjY2wWCxuD9KwXbu8FywAIARQU+NoR0REEU1S0dK5c2fMnz8f8fHxaGpqwssvv4z777/f5zonT55EcnKy63mPHj0AAKdOnfLYftmyZTAYDK5HRkaGlC6S2tTXB7YdERFplqxbnpubm3HfffchKioKzz33XLvtW16Bcv5bp9N5bLtw4UKYzWbXw9sZGdKI1NTAtiMiIs2SfMuz3W7HtGnTcPz4cfztb39r9/JQamoqzpw543p+9uxZAEBKSorH9nFxcYiLi5PaLVKrnBzHnJW6OseloNacc1pyckLfNyIiUhTJZ1qee+45fPvtt/joo4/QvXv3dtvn5ORg9+7drud79+5FVlYW0tPTpW6atEivB1audPy79dk35/MVKzgJl4iIpBUtJ0+exEsvvYRXX30VgON2ZpPJBLvdDovFgqampjbr5Obmor6+Hq+++iqqqqpQXFyMGTNmBKb3pA15ecDGjUDrQtZodCzPywtPv4iISFEkFS3btm2DxWLB6NGj0a1bN9ejuroaQ4YMwebNm9usYzAYUFpaipKSEgwaNAh9+/bFwoULAzYA0oi8PKCqCtixA1i3zvG1spIFCxERuUjKaQkH5rQQERGpT9hzWoiIiIjChUULERERqQKLFiIiIlIFFi1ERESkCixaiIiISBVYtBAREZEqsGghIiIiVWDRQkRERKrAooWIiIhUgUULERERqQKLFiIiIlIFFi1ERESkCixaiIiISBVYtBAREZEqsGghIiIiVWDRQkRERKrAooWIiIhUgUULERERqQKLFiIiIlIFFi1ERESkCixaiIiISBVYtBAREZEqsGghIiIiVWDRQkRERKrAooWIiIhUgUULERERqQKLFiIiIlIFFi1ERESkCixaiIiISBVYtBAREZEqsGghIiIiVWDRQkRERKrAooWIiIhUgUULERERqQKLFiIiIlIFyUVLfX09xo4di/379/vVPiUlBTqdzvUYMWKE1E0SERERIVpK49mzZ2PNmjWSNmAymXDo0CGkpKQ4NhgtaZNEREREACSeaVm6dCkqKyv9bt/Y2IjGxkb069cPXbt2RdeuXdGlSxfJnSQiIiKSVLQkJycjKyvL7/YmkwmdOnXC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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# using sklearn\n",
    "from sklearn.cluster import KMeans\n",
    "kmeans = KMeans(n_clusters=3, max_iter=100).fit(data)\n",
    "gt_labels__ = kmeans.labels_\n",
    "centers__ = kmeans.cluster_centers_\n",
    "\n",
    "# visualize result\n",
    "\n",
    "cat1 = data[gt_labels__ == 0]\n",
    "cat2 = data[gt_labels__ == 1]\n",
    "cat3 = data[gt_labels__ == 2]\n",
    "\n",
    "for ix, p in enumerate(centers__):\n",
    "    plt.scatter(p[0], p[1], color='C{}'.format(ix), marker='^', edgecolor='black', s=256)\n",
    "        \n",
    "plt.scatter(cat1_[:,0], cat1_[:,1], color='green')\n",
    "plt.scatter(cat2_[:,0], cat2_[:,1], color='red')\n",
    "plt.scatter(cat3_[:,0], cat3_[:,1], color='blue')\n",
    "plt.title('kmeans using sklearn with k=3')\n",
    "plt.xlim(4, 8)\n",
    "plt.ylim(1, 5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a2286fc9",
   "metadata": {},
   "source": [
    "# 寻找k均值算法的K值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "f7d8c3b4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAikAAAGvCAYAAACekkVGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABCVklEQVR4nO3deXxU9b3/8fdMJpnsk5AEkkAkYRVQCIigkIBViytotbfiQl17XWivP1prL7WKpbW4ldo+tPb2qqhoW8WtFVR67y0qqyBhB1mEQAJkIcnMZF9mzu+PJAMIhAlMcmYmr+fjcR7NTOac+ZxHrXn3fL/fz9diGIYhAACAIGM1uwAAAICTIaQAAICgREgBAABBiZACAACCEiEFAAAEJUIKAAAISoQUAAAQlAgpAAAgKBFSAABAUCKkAD3Ap59+KovFoo0bN/ree/LJJ2W1WvXRRx8F/Psef/xxXXLJJZ0+79VXX1V2dnZAaigsLJTFYlFhYWFArgeg+xFSgB5o/fr1euyxx/T//t//09VXXx3w699zzz364x//eMrfP/fcc8cFJgA4GZvZBQDoXrW1tbrllls0cuRIPfnkk13yHf369evw988995ySkpKUm5vbJd8PIDwQUoAe5sEHH9Thw4e1ZMkSRUVFmV0OAJwSwz1AD/Lee+/p5Zdf1tNPP61Bgwb5fd6uXbtksVj05ZdfqqKiQhaLRT//+c8lSZMnT9a999573OdPNielfY6IxWLR/v37deedd/pen+z7Jk2apNjYWI0cOVJffvll52+2A7t379ZVV12lmJgY9e3bV7/+9a/l9Xp9v29sbNSPfvQjZWZmKi4uTvn5+ScMT7377rs6//zzFRMTo5ycHD3//PMBrREAIQXoUX7zm99Iap2T0hmDBw+Ww+HQ9u3btXnzZl1wwQXavHmzJGn79u0aO3bsaa+RkZGh1atXa/Xq1UpPT9cvfvEL3+tj1dTU6IorrtDll1+ud999V4ZhnBCCzkZZWZkmTZokl8uld955Rz/5yU/0m9/8Rj/96U99n5k3b55eeeUVPfnkk3rnnXcUHx+vm266yff7PXv26KabbtKECRP00Ucf6d5779WPfvQjrVq1KmB1AmC4B+hRBg4cqMsuu0z//d//rdmzZ2vAgAF+nWexWHTBBRdo+/btqqqq0ne+8x29/PLLOnLkiI4cOeJXSLHb7brooot8Pw8cOND3+lgVFRX6z//8Tz300EOSWkPLLbfc0om77Ngf//hH1dXVafHixerVq5euueYatbS06JFHHtHs2bOVmpqqwsJCZWdn6/vf/74kKTc3VwUFBTIMQxaLRcXFxfJ4PLr77rs1btw4fetb39KoUaOUlZUVsDoB8CQF6FH+8Ic/6PHHH1dUVJR+9atfdercsWPH+p6knH/++bLZbFq5cqXsdrvOO++8gNVotVo1c+ZM3+u0tDS1tLQE7Prr1q3T6NGj1atXL997l19+uVpaWnxDOvfcc4/279+v0aNHa9asWVq9erWmTJniG5qaMGGCLrzwQl199dWaMWOGnn/+eUIK0AUIKUAP0qdPH/Xu3VsPPPCAFi5cqD179vh97oUXXqjt27dry5YtGjp0qIYMGaK33npLo0aNUmRkZMBqzMzMVExMTMCu902GYZzwXnv4aP9dXl6evv76a/3kJz9RfX297r77bk2ePNkXlqKiorRq1Sr99a9/VU5Ojl5++WUNHjw44HNngJ6OkAL0QA8//LCio6P1y1/+0u9zxo4dq71792rLli0aMGCAhg4dqnfffdevoZ5vio6OVn19/Ul/FxER0enrdcbYsWO1ceNGVVVV+d77v//7P9lsNo0aNUpS65yUr776Srfddpv+9Kc/6a9//atWr16tLVu2SJKWLVum3/72t/r2t7+tuXPn6ssvv1RycrIWLlzYpbUDPQ1zUoAeKC0tTTNnztRvf/tbPfLIIzr33HNPe052drZSU1OVnJysyMhIDR06VE1NTWcUUsaNG6c33nhD5557rsrLyxUTE6OpU6eeya102syZM/Vf//VfmjZtmmbPnq1du3Zpzpw5mjlzpnr37i1J2rdvn958803NnTtXvXr10oIFCxQZGam+fftKan2S8uijj8pms+nCCy/Utm3bVFpa6vccHwD+4UkK0EP99Kc/VUxMTKefpgwZMkSSNHToUN97nfX0008rKSlJ11xzje677z4dOXKk09c4U3369NHnn3+uuLg43XjjjXr66af1s5/9TPPnz/d95tlnn9XEiRP1wx/+UFdeeaW++uorvfPOO74QM3HiRP35z3/Wq6++qiuvvFJz587VD3/4w+Pm0gA4exbjZAO0AAAAJuNJCgAACEqEFAAAEJQIKQAAICgRUgAAQFAipAAAgKBESAEAAEGpU83cCgoKdNddd2nnzp3Kz8/XG2+84esbcCorV67Ufffdp8LCQk2aNEkLFizwnbN06VL96Ec/0sGDBzV16lS98sorio2N9bser9erQ4cOKSEh4aTbvQMAgOBjGIaqq6uVmZkpq7WD5yWGnzwej5GdnW088sgjRlFRkTFt2jTjlltu6fCc+vp6IyMjw3jttdeMoqIi4+qrrzbuuusuwzAMo6qqykhMTDRefPFFY9++fcb48eONn//85/6WYxiGYRQVFRmSODg4ODg4OELwKCoq6vDvvN/N3JYtW6brr79eFRUVstlsKigoUF5ensrLyxUXF3fSc3bs2KGf/exn+sc//iGpdYv0hQsXavXq1VqwYIGeffZZbdu2TZL03nvvadasWdq/f78/5UiSXC6XkpKSVFRUpMTERL/PAwAA5nG73crKypLT6ZTD4Tjl5/we7lm5cqXGjRsnm631lNzcXHk8HhUUFCg/P/+k5wwbNswXUKqrq/XBBx9o9OjRvutNmDDB99nx48frwIEDKioq8nu78/YhnsTEREIKAAAh5nRTNfyeOFtSUqLU1NSjJ1qtSk5OVmlp6WnPPXDggJKSklRYWKgnnnjipNdLSUmRpA6v19jYKLfbfdwBAADCU6dW93xzZMgwDL8mrGZmZmrFihVyOBx69NFHT3q99p87ut68efPkcDh8h79PXAAAQOjxO6RkZGSovLzc99rj8cjpdCo9Pf2U5xQVFWnHjh2y2Wy6+OKL9fOf/1xvvvnmSa9XUVEhSR1eb/bs2XK5XL6jqKjI3/IBAECI8Tuk5Ofna926dWppaZEkbdiwQTabzTfH5GQ+/vhj3X333b7XFotFERERvuutWrXK97s1a9YoOztbffv2PeX17Ha7b/4J81AAAAhvfoeUvLw8paWlac6cOSouLtbcuXN1ww03KDY2Vm63W83NzSecc+mll2rDhg16//33tX//fr3wwgu6+uqrJUnXXXedDh8+rBdffFGFhYV65plndNtttwXuzgAAQEjzO6RYrVYtWrRIixcv1qBBg9TQ0KD58+dLkkaOHKklS5accM6gQYP0+uuv6+GHH9bIkSPVq1cvPffcc5Ikh8Oht99+W/Pnz9fw4cOVk5Oj2bNnB+auAABAyPO7T0owcrvdcjgccrlcDP0AABAi/P37zd49AAAgKBFSAABAUCKkAACAoERIAQAAQYmQAgAAghIh5Rsamj1asHKf7n9jvVo8XrPLAQCgx/J7F+SeIjLCqt//324565q1scipsdm9zC4JAIAeiScp3xBhtShvUOvuzJ/vKj/NpwEAQFchpJzEpMFpkqTPdx8xuRIAAHouQspJ5A9pfZKyudgpZ12TydUAANAzEVJOIsMRoyF94uU1pBV7eJoCAIAZCCmnkN825LN8FyEFAAAzEFJOYdKQ9nkp5QrhPRgBAAhZhJRTGJ/TS1E2qw67GrSnrMbscgAA6HEIKacQHRmh8TmtPVJY5QMAQPcjpHTAtxSZfikAAHQ7QkoH2uelfLGvQg3NHpOrAQCgZyGkdGBIn3j1SbSrodmrLwurzC4HAIAehZDSAYvF4luK/PluhnwAAOhOhJTT8C1FZl4KAADdipByGnmDUmWxSF+VVKvM3WB2OQAA9BiElNPoFRel8/s6JLEUGQCA7kRI8UP7UuTlzEsBAKDbEFL8kD+4dVfk5buPyOulRT4AAN2BkOKHMf2TFW+3qbK2SdsOuc0uBwCAHoGQ4ofICKsuHpgiiaXIAAB0F0KKnya1DfmwFBkAgO5BSPFTe7+U9furVNPYYnI1AACEP0KKn/qnxKl/SqxavIbWfF1hdjkAAIQ9QkontK/yYV4KAABdj5DSCe39UpiXAgBA1yOkdMLFA1Nks1pUWFGnAxV1ZpcDAEBYI6R0QkJ0pMackyyJIR8AALoaIaWTJg1hKTIAAN2BkNJJ7UuRV39doWaP1+RqAAAIX4SUThqR6VBybKSqG1u0schpdjkAAIQtQkonRVgtymOVDwAAXY6QcgaO9ks5YnIlAACEL0LKGWjvl7K52Kmq2iaTqwEAIDwRUs5AuiNaQ/skyDCkFXt4mgIAQFcgpJyh9iGf5fRLAQCgSxBSzlD7UuTPdx2RYRgmVwMAQPghpJyhcTm9ZLdZVeJu0J6yGrPLAQAg7BBSzlB0ZITG5fSSJH3GUmQAAAKOkHIWJrcP+bAUGQCAgCOknIX2eSlf7K1QQ7PH5GoAAAgvhJSzMLh3vNITo9XY4tW6wkqzywEAIKwQUs6CxWI52n2WeSkAAAQUIeUstQ/5LGdeCgAAAUVIOUt5g1JlsUhflVSr1N1gdjkAAIQNQspZSo6L0si+DkkM+QAAEEiElABgyAcAgMAjpARAftuuyCv2HJHXS4t8AAACoVMhpaCgQLm5uYqJidGUKVNUVlZ22nPWr1+vMWPGKDExUdddd50qK48u1U1PT5fFYvEdY8eO7fwdBIHR5yQp3m5TZW2Tth5ymV0OAABhwe+Q4vV6deONN+raa6/V7t27FRMTo1mzZp32nFtuuUVTpkzR5s2bVVZWpscee8z3e6fTqR07dqiqqkpVVVX69NNPz/hGzBQZYdWEgSmSGPIBACBQ/A4pn332mSorK/X444+rX79+mjNnjt5//33V1tae8py9e/dq165devTRR5Wdna0ZM2Zo+fLlkqTGxkY1NjZqwIABSkpKUlJSkuLj48/+jkyS3zYvhX18AAAIDL9DysqVKzVu3DjZbDZJUm5urjwejwoKCk55TmxsrJ577jnFxcVJkioqKhQTEyOp9SlKdHS0br75ZsXExGjSpEk6ePBghzU0NjbK7XYfdwSLyW3zUgr2V6m6odnkagAACH1+h5SSkhKlpqYePdFqVXJyskpLS095TmZmph588EFJksvl0ksvvaQZM2ZIag0pDQ0Nuuyyy7R9+3ZZrVY99NBDHdYwb948ORwO35GVleVv+V3unJRYZafEqsVraM1eWuQDAHC2OjVx1jCME15bLJbTnldbW6upU6dq9OjRuv/++yVJAwYM0KFDh/TAAw8oJydH999/v5YtW9bhdWbPni2Xy+U7ioqKOlN+l2tf5UO/FAAAzp7fISUjI0Pl5Uf/+Ho8HjmdTqWnp3d4Xl1dna644grFxsbqb3/7m6zW1q+MjIxURkaG73PJycmnHb6x2+1KTEw87ggm7f1SPt9NSAEA4Gz5HVLy8/O1bt06tbS0SJI2bNggm82m0aNHd3jeAw88oLi4OP39739XdHS07/0XXnhBl156qe/1gQMHlJ2d3cnyg8vFA1Nks1q0v6JO+ytOPaEYAACcnt8hJS8vT2lpaZozZ46Ki4s1d+5c3XDDDYqNjZXb7VZz84mTRTdt2qQPPvhAzz//vOrr6+V0OuV0OiVJl1xyiVatWqXFixdr586d+v3vf6877rgjUPdlini7TWP6J0uSPmcpMgAAZ8XvkGK1WrVo0SItXrxYgwYNUkNDg+bPny9JGjlypJYsWXLCOR988IFcLpeGDBmi5ORk3yFJI0aM0J/+9CfNnDlT+fn5uvzyy0/bdyUUTB7CvBQAAALBYnxzNmwIcbvdcjgccrlcQTM/ZXOxU9OeX6l4u00bHvu2IiPYeQAAgGP5+/ebv6ABdl6mQ73iolTT2KINB5xmlwMAQMgipASY1WpR3qDWfjLLWeUDAMAZI6R0gfzBrSGFeSkAAJw5QkoXaO+XsvmgS5W1TSZXAwBAaCKkdIE+idE6Nz1BhiGt3MNSZAAAzgQhpYsw5AMAwNkhpHSRY1vkh/AqbwAATENI6SIXZveS3WZVqbtRu8tqzC4HAICQQ0jpItGRERo/IEUSQz4AAJwJQkoXmtQ2L+UzQgoAAJ1GSOlC7fv4rN1XqYZmj8nVAAAQWggpXWhQ73ilJ0arscWrtfsqzS4HAICQQkjpQhaLRZOGsBQZAIAzQUjpYu1LkZfvpqkbAACdQUjpYhMHpspikXaWVqvE1WB2OQAAhAxCShdLjovSyH5JklobuwEAAP8QUrrB5LalyAz5AADgP0JKN8hvm5eyYne5PF5a5AMA4A9CSjfIzUpSgt2mqrpmbT3oMrscAABCAiGlG0RGWDVhUGuL/OXMSwEAwC+ElG6SP7htV+RdzEsBAMAfhJRu0t4iv+BAlaobmk2uBgCA4EdI6SZZvWKVkxqnFq+h1V9XmF0OAABBj5DSjfLbliLTLwUAgNMjpHSjSYNpkQ8AgL8IKd3o4oEpioywaH9FnfZX1JpdDgAAQY2Q0o3i7DaNOSdZErsiAwBwOoSUbta+K/LnDPkAANAhQko3a5+XsvrrCjV7vCZXAwBA8CKkdLMRmYlKiYtSTWOLCvZXmV0OAABBi5DSzaxWi/LYFRkAgNMipJjA1yKffikAAJwSIcUEk9qepGw56FJlbZPJ1QAAEJwIKSbonRitc9MTZBjSij0M+QAAcDKEFJP4liLTLwUAgJMipJjkaIv8chmGYXI1AAAEH0KKScZmJys60qpSd6N2ldaYXQ4AAEGHkGKS6MgIjc9JkcSQDwAAJ0NIMdHRFvmEFAAAvomQYqLJQ1qXIn+xr1INzR6TqwEAILgQUkw0MC1eGY5oNbV49cW+SrPLAQAgqBBSTGSxWHyrfJiXAgDA8QgpJmufl7KceSkAAByHkGKyiYNSZLVIu0prdNhVb3Y5AAAEDUKKyZJiozSyX5IkafkuWuQDANCOkBIEWIoMAMCJCClBoH1X5BV7jsjjpUU+AAASISUo5GYlKSHaJmdds7YedJldDgAAQYGQEgRsEVZNHNj6NIWlyAAAtCKkBIn8tu6zzEsBAKAVISVItDd1KzjgVHVDs8nVAABgPkJKkMjqFasBqXHyeA2t+rrC7HIAADAdISWI5A9mXgoAAO06FVIKCgqUm5urmJgYTZkyRWVlZac9Z/369RozZowSExN13XXXqbLy6EZ6S5cu1ZAhQxQXF6fp06errq6u83cQRo62yKepGwAAfocUr9erG2+8Uddee612796tmJgYzZo167Tn3HLLLZoyZYo2b96ssrIyPfbYY5Ikp9Op733ve/rxj3+sbdu2qbCwUE888cTZ3U2Iu2hAiiIjLDpQWafCI7VmlwMAgKn8DimfffaZKisr9fjjj6tfv36aM2eO3n//fdXWnvqP6d69e7Vr1y49+uijys7O1owZM7R8+XJJ0vvvv69+/frpvvvuU3Z2th5++GG98cYbZ39HISzObtMF/ZMlscoHAAC/Q8rKlSs1btw42Ww2SVJubq48Ho8KCgpOeU5sbKyee+45xcXFSZIqKioUExPju96ECRN8nx0/frwOHDigoqKiU16vsbFRbrf7uCPc+Frks48PAKCH8zuklJSUKDU19eiJVquSk5NVWlp6ynMyMzP14IMPSpJcLpdeeuklzZgx46TXS0lJkaQOrzdv3jw5HA7fkZWV5W/5IaN9KfLqr4+oqcVrcjUAAJinUxNnDcM44bXFYjntebW1tZo6dapGjx6t+++//6TXa/+5o+vNnj1bLpfLd3T01CVUDc9IVEpclGqbPCo4UGV2OQAAmMbvkJKRkaHy8qPzJDwej5xOp9LT0zs8r66uTldccYViY2P1t7/9TVar9aTXq6ho7Q3S0fXsdrsSExOPO8KN1WrxLUVezrwUAEAP5ndIyc/P17p169TS0iJJ2rBhg2w2m0aPHt3heQ888IDi4uL097//XdHR0cddb9WqVb7Xa9asUXZ2tvr27dvZewg7+YOZlwIAgN8hJS8vT2lpaZozZ46Ki4s1d+5c3XDDDYqNjZXb7VZz84mt3Ddt2qQPPvhAzz//vOrr6+V0OuV0OiVJ1113nQ4fPqwXX3xRhYWFeuaZZ3TbbbcF7MZCWfs+PlsPuVRR02hyNQAAmMPvkGK1WrVo0SItXrxYgwYNUkNDg+bPny9JGjlypJYsWXLCOR988IFcLpeGDBmi5ORk3yFJDodDb7/9tubPn6/hw4crJydHs2fPDtBthbbeCdEalpEow5BW7OFpCgCgZ7IY35wNG0LcbrccDodcLlfYzU+Z99EO/dfne3XjmH767fdGmV0OAAAB4+/fb/buCVJHW+SXn7CqCgCAnoCQEqTGZicrOtKqsupG7SytNrscAAC6HSElSNltEbpoQGuDO3ZFBgD0RISUIDaJpcgAgB6MkBLE2uelrC2sVH2Tx+RqAADoXoSUIDYwLU6Zjmg1tXj1xb4Ks8sBAKBbEVKCmMViOWaVD0M+AICehZAS5NpDCpNnAQA9DSElyE0cmCqrRdpdVqNDznqzywEAoNsQUoKcIzZSo7KSJEkrGPIBAPQghJQQ0L4U+bPdDPkAAHoOQkoImNS2K/KK3Ufk8dIiHwDQMxBSQsCofklKiLbJVd+sLQddZpcDAEC3IKSEAFuEVXmDWp+msMoHANBTEFJCRP5gliIDAHoWQkqIaJ+XsqHIKXdDs8nVAADQ9QgpIaJfcqwGpMXJ4zW0ag8t8gEA4Y+QEkJ8uyKzFBkA0AMQUkJI+5DP57vKZRgsRQYAhDdCSgi5aECKIiMsKq6qV2FFndnlAADQpQgpISQ2yqax/XtJYpUPACD8EVJCTPuuyMuZlwIACHOElBCTP7h1XsrqryvU1OI1uRoAALoOISXEDM9IVGp8lGqbPFq/v8rscgAA6DKElBBjtVp83WcZ8gEAhDNCSghqH/KhXwoAIJwRUkJQ+5OUrQfdqqhpNLkaAAC6BiElBKUl2DU8I1GStGLPEZOrAQCgaxBSQlR+W/fZz+iXAgAIU4SUEDXZN3n2CC3yAQBhiZASoi7ITlZMZITKqxv1VUm12eUAABBwhJQQZbdF6KIBtMgHAIQvQkoIO9oin8mzAIDwQ0gJYe0hZW1hpeqbPCZXAwBAYBFSQtiA1Dj1TYpRU4tXa/ZVmF0OAAABRUgJYRaLRZPaliIv38WQDwAgvBBSQtyktqXItMgHAIQbQkqImzAwVVaLtKesRoec9WaXAwBAwBBSQpwjNlK5WUmS2BUZABBeCClhoH2Vz+fMSwEAhBFCShho3xV5xZ4j8nhpkQ8ACA+ElDAwqp9DidE2ueqbtbnYaXY5AAAEBCElDNgirMob3LoUmSEfAEC4IKSEiXyWIgMAwgwhJUy0T57dWOSUq77Z5GoAADh7hJQw0TcpRgPT4uTxGlr9NUM+AIDQR0gJI+1DPp8xLwUAEAYIKWFksq9fSrkMg6XIAIDQRkgJI+MH9FJUhFUHnfXad6TW7HIAADgrhJQwEhtl09jsZEnS8t0M+QAAQhshJcxMOmbIBwCAUEZICTP5bU3dVu+tUFOL1+RqAAA4c4SUMDMsPVGp8XbVNXm0fn+V2eUAAHDGOhVSCgoKlJubq5iYGE2ZMkVlZWV+nbdnzx4NHz5cTqfzuPfT09NlsVh8x9ixYztTDk7CarVoUnuLfLrPAgBCmN8hxev16sYbb9S1116r3bt3KyYmRrNmzTrteVdccYUGDx6sHTt2nPA7p9OpHTt2qKqqSlVVVfr00087VTxOLn9I+z4+hBQAQOiy+fvBzz77TJWVlXr88cdls9k0Z84c5eXlqba2VnFxcac877XXXtOePXuUn59/3PuNjY1qbGzUgAEDFBUVdeZ3gBO0N3XbdsitIzWNSo23m1wRAACd5/eTlJUrV2rcuHGy2VpzTW5urjwejwoKCjo8Lz09Xf369TvhfafTqejoaN18882KiYnRpEmTdPDgwQ6v1djYKLfbfdyBE6XG2zUiM1GStIKlyACAEOV3SCkpKVFqaurRE61WJScnq7S09Iy+2Ol0qqGhQZdddpm2b98uq9Wqhx56qMNz5s2bJ4fD4TuysrLO6Lt7At+uyAz5AABCVKcmzn6z1bphGLJYLGf0xQMGDNChQ4f0wAMPKCcnR/fff7+WLVvW4TmzZ8+Wy+XyHUVFRWf03T3BpPZ5KbuP0CIfABCS/J6TkpGRcdzkV4/HI6fTqfT09DP64sjISGVkZPheJycnn3b4xm63y25nfoU/LuifrNioCB2padSOw9Ua3jb8AwBAqPD7SUp+fr7WrVunlpYWSdKGDRtks9k0evToM/riF154QZdeeqnv9YEDB5SdnX1G18KJ7LYIXTQgRRJLkQEAocnvkJKXl6e0tDTNmTNHxcXFmjt3rm644QbFxsbK7Xarubm5U198ySWXaNWqVVq8eLF27typ3//+97rjjjs6Wz860N4vZTkhBQAQgvwOKVarVYsWLdLixYs1aNAgNTQ0aP78+ZKkkSNHasmSJZ364hEjRuhPf/qTZs6cqfz8fF1++eV+9V2B/9r38Vm3r0p1TS0mVwMAQOdYjBCeVel2u+VwOORyuZSYyJyLbzIMQ3lPLdNBZ70W3HGhvnVub7NLAgDA77/f7N0TxiwWy9FdkRnyAQCEGEJKmJtMi3wAQIgipIS5iwemKsJq0dfltTrorDe7HAAA/EZICXOOmEjlZiVJkpbzNAUAEEIIKT3ApMHMSwEAhB5CSg+Q3zYvZcXuI2rxeE2uBgAA/xBSeoBR/ZLkiImUu6FFmw+6zC4HAAC/EFJ6gAirRXmDWOUDAAgthJQeIt/XIv+IyZUAAOAfQkoP0d7UbWORU676zu2zBACAGQgpPURmUowG9Y6Xx2to1R6epgAAgh8hpQdpH/L5nCEfAEAIIKT0IL59fHaVK4T3lQQA9BCElB7kopwURUVYddBZr71Has0uBwCADhFSepCYqAhdmJMsiRb5AIDgR0jpYY62yGdeCgAguBFSepj8tpCy+usKNbZ4TK4GAIBTI6T0MMMyEpSWYFd9s0fr91eZXQ4AAKdESOlhLBaLbynyC8v28DQFABC0CCk90N15OYqJjNDKPRX68Vub5PGyHBkAEHwIKT3QiEyH/vz9CxQZYdGSLYf1iw+20DcFABB0CCk9VP7gNP1++mhZLdJf1xbpqU92ml0SAADHIaT0YFefn6HffOd8SdKfPvtaL376tckVAQBwFCGlh5s+7hzNvupcSdJTn3ylv649YHJFAAC0IqRA904eqPsvGShJ+vn7W7R48yGTKwIAgJCCNg9fMVQ3jztHhiHNemujPqNtPgDAZIQUSGrtn/Lr68/TNSMz1OwxdN/C9TR7AwCYipACnwirRb/7Xq4mD0lTfbNHdy5Yqx2H3WaXBQDooQgpOE6UzaoXbxujC/ony93Qou+/slb7K2rNLgsA0AMRUnCC2CibXrn9Qp2bnqDy6kbd9vIXKnU3mF0WAKCHIaTgpByxkXr9rnHqnxKrosp6zXj5CznrmswuCwDQgxBScEq9E6P1xt3j1TvBrl2lNbpjwTrVNraYXRYAoIcgpKBDWb1i9cY945UUG6mNRU7d98Z6dk4GAHQLQgpOa0ifBC2440LFRkVo+e4j+n9/28jOyQCALkdIgV9Gn5OsP88Yq6gIqz7eWqKfv8fOyQCArkVIgd/yBqfqDzfnymqR3vqySPM+/oqgAgDoMoQUdMqV52XoyRtGSpL+/PlevfgZOycDALoGIQWd9r0Ls/TI1cMkSU9/slNvfrHf5IoAAOGIkIIz8oNJAzTzW607J//ig636cBM7JwMAAouQgjP20JShunV8687JP357oz7dWWZ2SQCAMEJIwRmzWCyae915mjoqs3Xn5DfW68vCSrPLAgCECUIKzkqE1aLf/tsoTR6SpoZmr+58dZ22H2LnZADA2SOk4KxF2az6020XaGz/ZFW37ZxceISdkwEAZ4eQgoCIiYrQy3dcqGEZiTpS07pzcomLnZMBAGeOkIKAccS07pycnRKr4qrWnZOratk5GQBwZggpCKi0BLsW3j1efRLt2l1WozteZedkAMCZIaQg4LJ6xeqNu1t3Tt5U5NS/L/ySnZMBAJ1GSEGXGNwnQa/eOU5xURFauadCD/51o1o8XrPLAgCEEEIKukxuVpL+/P3WnZM/2Vai2eycDADoBEIKutTEQan6w82jZbVIi9YX64klOwgqAAC/EFLQ5a48L11P3ti6c/JLK/bpj5+yczIA4PQIKegW3xubpV9c07pz8jNLd2rhGnZOBgB0rFMhpaCgQLm5uYqJidGUKVNUVubfhnJ79uzR8OHD5XQ6j3t/6dKlGjJkiOLi4jR9+nTV1dV1phyEmHvyB+hHlw6SJD329636BzsnAwA64HdI8Xq9uvHGG3Xttddq9+7diomJ0axZs0573hVXXKHBgwdrx44dx73vdDr1ve99Tz/+8Y+1bds2FRYW6oknnuj8HSCk/PjbQzTjov6tOye/tVHLvmLnZADAyVkMP2cxLlu2TNdff70qKipks9lUUFCgvLw8lZeXKy4u7pTnlZSUaM+ePcrPz1dVVZWSkpIkSQsWLNCzzz6rbdu2SZLee+89zZo1S/v3+z8M4Ha75XA45HK5lJiY6Pd5MJfXa2jW2xv1942HFB1p1cK7x+vC7F5mlwUA6Cb+/v32+0nKypUrNW7cONlsNklSbm6uPB6PCgoKOjwvPT1d/fr1O+n1JkyY4Hs9fvx4HThwQEVFRf6WhBBltVr07L+N0reGtu6cfNer67TtkMvssgAAQcbvkFJSUqLU1NSjJ1qtSk5OVmlp6Rl98Tevl5KSIkkdXq+xsVFut/u4A6EpMsKqP956gS7Mbt05+fZX1mofOycDAI7RqYmz3xwZMgxDFovljL/82Ou1/9zR9ebNmyeHw+E7srKyzvi7Yb6YqAi9dPuFGp6RqCM1TbrtpS902FVvdlkAgCDhd0jJyMhQeXm577XH45HT6VR6evoZffE3r1dRUSFJHV5v9uzZcrlcvoOhodDniInUa3eNU05qnA466zXj5bWqZOdkAIA6EVLy8/O1bt06tbS07mi7YcMG2Ww2jR49+oy+OD8/X6tWrfK9XrNmjbKzs9W3b99TnmO325WYmHjcgdDXunPyOKUnRmtPWY3uXLBWNeycDAA9nt8hJS8vT2lpaZozZ46Ki4s1d+5c3XDDDYqNjZXb7VZzc3Onvvi6667T4cOH9eKLL6qwsFDPPPOMbrvttk7fAMJDv+RYvXHPOCXHRmpTsUv//vqXamhm52QA6Mn8DilWq1WLFi3S4sWLNWjQIDU0NGj+/PmSpJEjR2rJkiWd+mKHw6G3335b8+fP1/Dhw5WTk6PZs2d3rnqElUG9E/TaXa07J6/6ukL/8dcN7JwMAD2Y331SghF9UsLTqq+P6I4F69TU4tV3L+inp28cKav1zCdoAwCCS8D7pADdZcLAVD1/82hFWC16Z32xfs3OyQDQIxFSEJSmjEjXU207J7+ycp+e/9cekysCAHQ3QgqC1ncv6KfHrh0uSfrt/+zSwtWF5hYEAOhWhBQEtbvycvQflw2WJD32j236+8aDJlcEAOguhBQEvVmXD9btF7funPyTtzfpX1+d2VYMAIDQQkhB0LNYLJozdYSuz81Ui9fQ/W8UaO2+SrPLAgB0MUIKQoLVatEz/zZKl57bW40tXt396jptPcjOyQAQzggpCBmtOyeP0bicXqpubN05eW95jdllAQC6CCEFISU6MkIv3T5WIzITVVHbpBkvr9UhJzsnA0A4IqQg5CRGt+6cPMC3c/IX7JwMAGGIkIKQlBpv18J7xivDEa2vy2t1x4K1qm7o3CaXAIDgRkhByOqbFKOFd49Xr7gobS526QfsnAwAYYWQgpA2qHe8XrtznOLtNq3ZW6kf/oWdkwEgXBBSEPLO7+fQf39/rKJsVv3vjlI9/O5meb1sSAgAoY6QgrBw8cAUvXDLGEVYLXqv4KB+tWQ7OycDQIgjpCBsfHt4Hz3z3dadkxesLNScf2xTWXWDyVUBAM4UIQVh5YYx/TRnauvOya+v3q+JT/5Ls97aqC3FdKcFgFBjMUL4mbjb7ZbD4ZDL5VJiYqLZ5SCI/HNbif7r871av7/K997Y/sm6c2KOrhjRR7YI8jkAmMXfv9+EFIS1TUVOLVi5T0u2HFazp/Uf9UxHtL4/IVvTL8xSUmyUyRUCQM9DSAGOUeZu0Btr9uvNLw6ooq07bXSkVTeM6ac7J2RrcJ8EkysEgJ6DkAKcREOzR//YdEgLVhZqx2G37/38wam6a2KOJg9Jk9VqMbFCAAh/hBSgA4Zh6It9lXplxT79z45Stf+vYEBqnG6fkK3vXtBPcXabuUUCQJgipAB+Kqqs02urCvXWl0WqbmiRJCXYbbrpwizdPiFbWb1iTa4QAMILIQXopNrGFr1bUKxXVxZq75FaSZLVIl0+rI/uysvR+JxeslgYCgKAs0VIAc6Q12vos13lemXlPi3ffcT3/rCMRN05MVvTRmUqOjLCxAoBILQRUoAA2F1arQWrCvVeQbEamls3LkyJi9It48/RbRf1V5/EaJMrBIDQQ0gBAshZ16S/rSvS66sKdcjV2mrfZrXo2pEZunNijkZlJZlbIACEEEIK0AVaPF79c3upFqzcp3WFR7vZjjknSXfl5eiKEemKpJstAHSIkAJ0sS3FLi1YuU8fbj7k62ab4YjWjIv76+YLz1FyHN1sAeBkCClANymrbtAbaw7oL1/s15Gao91svzO6r+6cmKMhdLMFgOMQUoBu1tji0YebDmvByn3aduhoN9u8Qam6c2K2vjW0N91sAUCEFMA0hmFoXWGVFqzcp6XbSuRt+19Ydkqsbp+QrX8bm6V4utkC6MEIKUAQKKqs08I1+/W3tQfkPqab7b+NzdIdE7J1TgrdbAH0PIQUIIjUNrbovQ0HtWDlPu0tb+1ma7FIl53bR3dNzNbFA1PoZgugxyCkAEHI6zX0+e5yLVhZqM92lfvePzc9QXdOzNZ1uX3pZgsg7BFSgCC3p6xGr60q1Dvri1Xf7JEkJcdG6pbx52jGRdlKd9DNFkB4IqQAIcJV16y3vjyg11bt10FnvaTWbrZXn5+hOydma/Q5ySZXCACBRUgBQkyLx6v/3VGqV1YUam1hpe/90eck6c6JObrqPLrZAggPhBQghG096NKClYX6cNMhNXlaNzZMT2zrZjvuHPWimy2AEEZIAcJAeXWj/vLFAS1cs19HaholSXabVdfn9tUdE7M1LIN/7gGEHkIKEEYaWzxasvmwFqws1JaDLt/756YnaOqoTE0blamsXvRcARAaCClAGDIMQ+v3V2nBykL9c3uJb2NDScrNStLUUZm6dmSG+iSyMghA8CKkAGHOWdekpdtK9I9Nh7T66wpf+32LRRqf00vTRvXVVeelsxszgKBDSAF6kLLqBn20+bA+3HxY6/dX+d63WS3KH5yqqaMy9e3hfZQQHWlilQDQipAC9FDFVXVavPmwPtx06LjdmO02qy49t7emjsrUpef2prMtANMQUgBoT1mNFm8+pH9sOuTbM0iS4qIiNGVEuqaOylDeoDRF2ei/AqD7EFIA+BiGoe2H3fpwU+sTlvbOtpKUFBupq85L19SRmRo/IEURVjY6BNC1CCkATsowDBUccOrDTYe0ePNhX/8VSUpLsOua8zM0LTdTo7OS2JkZQJcgpAA4LY/X0Bd7K/SPTYf08dYSueqbfb/rlxyja0e29mAZlpFAYAEQMIQUAJ3S1OLV8t3l+nDTIf1ze6nqmjy+3w1Mi9O0UX01dVSGBqTFm1glgHBASAFwxuqbPPrXV2X6cNMh/WtnmZpavL7fjchM1LRRmbp2VKb6JsWYWCWAUEVIARAQ7oZm/c+2Un24+ZCW7z4ij/fovzIu6J+saaMydfX5GUpLsJtYJYBQQkgBEHCVtU36eOth/WPjIa0trFT7vz2sFmnCwFRNHZWhK0dkyBFL0zgAp+bv3+9ONUcoKChQbm6uYmJiNGXKFJWVlZ32nKVLl2rIkCGKi4vT9OnTVVdX5/tdenq6LBaL7xg7dmxnygHQzXrFRenW8f311r0Xa/V/XqZfXDNMo7KS5DWkFXuO6GfvbtHYJ/5H97y2Tn/feFC1jS1mlwwghPn9JMXr9WrgwIG69dZbdd9992nmzJmKj4/Xm2++ecpznE6n+vfvr6eeekpXXnmlpk+frssuu0xPPPGEJCk6OlobN25Uenq6JMlmsyk+3v9JeTxJAYLD/opaX5fbr0qqfe9HR1p12bA+mjoyU5cMTaPLLQBJXTDcs2zZMl1//fWqqKiQzWZTQUGB8vLyVF5erri4uJOes2DBAj377LPatm2bJOm9997TrFmztH//fjU2Nio6OlqNjY2KijqzDdAIKUDw2VVarQ83tXa53V9x9Mlpgt2mKSPSNS03UxMGpigygi63QE8V8OGelStXaty4cbLZbJKk3NxceTweFRQUdHjOhAkTfK/Hjx+vAwcOqKioSE6nU9HR0br55psVExOjSZMm6eDBg/6WAyBIDemToJ9MGapPH7pE//jhRP0gP0fpidGqbmzRuwXFuv2VtRr/m//TLz7Yoi/2VsjrDdlpcQC6mN8hpaSkRKmpqUdPtFqVnJys0tJSv89JSUmRJJWWlsrpdKqhoUGXXXaZtm/fLqvVqoceeqjDGhobG+V2u487AAQni8Wikf2S9Mg1w7XqPy/V2/derNsuOke94qJUWdukN9Yc0E1/XqMJT/5Lv168XZuKnArhefwAuoCtMx/+5r9ADMM4bRfKY89p/9lisWjAgAE6dOiQMjIyJEn333+/HnzwwQ6vNW/ePP3yl7/sTMkAgoDVatG4nF4al9NLj08doZVfV+jDTYe0dGuJStwNemnFPr20Yp/6p8Rq6shMTR2VqaHpCWaXDcBkfoeUjIwM7dixw/fa4/HI6XT6Jr2e6pzy8nLf64qKCkmtq3oiIyN9AUWSkpOTT/tkZPbs2frxj3/se+12u5WVleXvLQAIArYIqyYPSdPkIWn69fXn6bNdrV1u/3dHqfZX1On5ZXv0/LI9GtInXhcPSNF5fR06v59Dg9LiZWMeC9Cj+B1S8vPz9dRTT6mlpUU2m00bNmyQzWbT6NGjOzxn3rx5vtdr1qxRdna2+vbtqxdeeEHvvvuu/vWvf0mSDhw4oOzs7A5rsNvtsttpGAWEi+jICF0xIl1XjEhXbWOL/ndHqT7cdFif7SrTrtIa7SqtOeazVg3LSNT5fR2twaWvQ4N7E1yAcNapJciDBw/W9OnTdf/99+uBBx6Qw+HQwoUL5Xa7FRMTo8jI4xs4uVwu9e/fX/PmzdNVV12lm266SVOmTNGvfvUrbdu2TRdccIHeeecdDR48WN/97nc1Y8YMPfzww34Xz+oeIDy56pr16a4ybS52actBl7YddKn2mL2E2tltxwaXRJ3X16EhfRJYOQQEuS7pOFtQUKA777xTO3fu1KRJk/Tmm28qLS1N2dnZeu6553T99defcM4///lPzZw5UwcPHtS0adP0yiuvKDY2VpL06quvas6cOaqvr9ett96qp59++oSgE4ibBBDavF5D+ypqtfWgS1vag8sht2pO0iwuymbVsPQE39OW9uASZSO4AMGCtvgAwprXa6iwolZbDrpaw8tBl7YddKv6ZMElwqpzM44Gl/MJLoCpCCkAehyv19D+yjptPSa4bDnoUnXDyYPL0LYnLuf1bR0yGpqeILuNrrhAVyOkAIBaWx8cqKzzBZb2ISP3SYJLZIRFQ/okHDc5d2h6Au38gQAjpADAKRiGoaLK+uODy0GXXPXNJ3zWZj0muPRrDS7nElyAs0JIAYBOMAxDxVUnBhdn3cmDy+A+CTq/79El0cMyEgkugJ8IKQBwlgzD0EFn/THzW9zaetClytqmEz4bYbVocO/441YVDc9IVEwUwQX4JkIKAHQBwzB0yNWgLcVHn7ZsPehSxSmCy6C09uCSqPP7OTQ8w0FwQY9HSAGAbmIYhg67Go4bJtp60KUjNScGF6tFGtT2xGVQ73ilJ0arT2K0+iTa1TsxWgl222n3RANCHSEFAExkGIZK3Y0nzHEpr27s8LzYqAj1SYxW7wS7+iRGK91x9Of2MNMnMZr5LwhphBQACEKl7gZf19yiyjqVVjeo1N2oUnfDSfu5nIojJtIXWI4NL70TWoNNn0S7UuPtbBGAoERIAYAQU9fU4gsspe4GlbkbVXLMz6XVDSpxNaixxevX9SwWKSXOrnSHXX0SotX7mDCTnhit3m0/94qNktXKEBO6j79/v/3eBRkA0LVio2zKSbUpJzXulJ8xDEPu+pa2JzANx4Wa9tdl7gaVVTeqxWvoSE2jjtQ0aqvcp7xmZIRFvRPaQktCW5BxRLf9fHS+TGI082XQvQgpABBCLBaLHLGRcsRGakifhFN+zus1VFHb1PoUpm1IqcR19Of2QFNR26hmT+tS64PO+g6/OyYywhdYWp/GtA0xJUarT4K9bf5MNKuXEDCEFAAIQ1arRWkJdqUl2CU5Tvm5Zo9X5dWNJ3kq09gWaFqHmNwNLapv9qiwok6FFXUdfnditK0tvNiVEmdXr7gopcRFqVd8lHrFRrW+jo9Srzi7kmIiGWrCKRFSAKAHi4ywKjMpRplJMR1+rr7Jc/SJjLtBZe4Th5tK3A1qaPbK3dAid0ONdpfVnPb7rRYpuS24HA0vrQEmpf299oAT1xpybEwG7jEIKQCA04qJilD/lDj1T+l4vkx1Y0tbgGkNL5W1TaqobVJlTZMq65pUWdt6VNQ0yt3QIq8hVbR9xl+OmEhfgGkPNsnfeEJz7O9Zrh26CCkAgICwWCxKjI5UYnSkBvU+9XyZds0er6raQ4wvzDQe/fmY/6ysbVJVXZMMQ3LVN8tV36y9R2r9qisuKqLtScw3ns7EnTzYxEZFMEE4SBBSAACmiIywqnfbxFt/eLyGnHUnhpfK4wJNoypqjr7X4jVU2+RRbWW9iio7nhjczm6z+oaYkmPbA439mKGooyEnLcGueLoEdxlCCgAgJERYLUqJtysl3q7BfnzeMAy5G1raAsvR8FJxkmBTWdP6c2OLV40tXh1yNeiQq8GvumKjItQ7wa7eCdFKS2zvSWP3vdcnsfU/E2MIM51FSAEAhCWLxSJHTKQcMZEd9p5pZxiG6po8J3860z6v5tihqJpG1TZ5VNfk36onu82qtAS7b9uD3gmty7mP+88Eu5JprudDSAEAQK2hJs5uU5zdpqxesX6dU9fUojJ3o8ralnGXVbcu3S5v6xDc/jtXfbMaW7wqrqpXcVXHw06RERalxduV1tZ/pnfbk5j2PZzS2t5LibMrIszDDCEFAIAzFBtlU3aqTdmneVLT0OxReVuAKXMfG2jajrbXlbVNavYYfg03RVgtSo2P8gUYX5j5RqhJjQ/dZduEFAAAulh0ZISyesWe9glNU4tXR2qODzHlxzTXa3/vSE2jPF6jbal3xztrt+7hFKU03/yYb4SZtvfSEuyy24JruTYhBQCAIBFl86+5XovHq4rapm88lWk47qlMmbtR5W1h5khNk47UNGnH4Y6/Pzk20hdc2ufP3JOXo5R4ewDv0n+EFAAAQowtwtq2+WO0zu9g2wOP11BlbZMvwJR/I9SUuht9w1DNHkNVdc2qqmvWztJq3zXunJjdDXd0coQUAADCVMQxeziN6OBzhmHIWdd83GTf9vkzKXHmPEWRCCkAAPR4FotFyXFRSo6L0rnpZldzVGhO9wUAAGGPkAIAAIISIQUAAAQlQgoAAAhKhBQAABCUCCkAACAoEVIAAEBQIqQAAICgREgBAABBiZACAACCEiEFAAAEJUIKAAAISoQUAAAQlEJ6F2TDMCRJbrfb5EoAAIC/2v9ut/8dP5WQDinV1dWSpKysLJMrAQAAnVVdXS2Hw3HK31uM08WYIOb1enXo0CElJCTIYrEE7Lput1tZWVkqKipSYmJiwK4bTML9Hrm/0Bfu98j9hb5wv8euvD/DMFRdXa3MzExZraeeeRLST1KsVqv69evXZddPTEwMy3/wjhXu98j9hb5wv0fuL/SF+z121f119ASlHRNnAQBAUCKkAACAoERIOQm73a45c+bIbrebXUqXCfd75P5CX7jfI/cX+sL9HoPh/kJ64iwAAAhfPEkBAABBiZACAACCEiEFAAAEJUIKAAAISoSUkzh8+LAmT56sjRs3ml1Kl9i7d68mT56shIQEXXLJJdq/f7/ZJQXUjh07dPHFFys+Pl75+fnavXu32SV1ic8//1wWi0Wffvqp2aUE3EUXXSSLxeI7UlNTzS4poJqbm3XvvfcqISFBw4cP19q1a80uKaAKCwuP+++v/QgnW7Zs0cUXX6yEhARdccUVOnDggNklBdSaNWs0cuRIxcbGavr06aqvrzelDkLKN9x7773KzMzU559/bnYpXebf//3fdc4552jr1q1KSUnRzJkzzS4poG655RZNmzZNu3bt0rnnnqv77rvP7JICrrm5WQ888IDZZXQZp9OppUuXqqqqSlVVVdq7d6/ZJQXUs88+q8LCQm3YsEHTp0/XbbfdZnZJAXXOOef4/rurqqrS66+/rvT0dLPLCqjvfOc7uvbaa7Vz505lZ2frrrvuMrukgGlpadFNN92k66+/Xtu2bVNJSYkef/xxc4oxcJzy8nJj3759hiRjw4YNZpcTcI2NjYbFYjG2bdtmGIZhLFmyxEhMTDS5qsCprKw08vLyjMbGRsMwWu8vPT3d5KoC76mnnjK+9a1vGQ6Hw1i2bJnZ5QRcenq6sWvXLrPL6DIDBw40Nm7caBiGYVRXVxuLFi0yPB6PyVV1nXvuuce44447zC4jYMrKygxJxuHDhw3DMIxVq1YZsbGxJlcVOFu3bjUkGVVVVYZhGMZHH31kZGVlmVILT1K+ITU1VdnZ2WaX0WWam5v19NNPKycnR5JUUVGhmJgYk6sKnOTkZC1fvlxRUVFqamrS22+/rdGjR5tdVkAVFxfrySef1AsvvGB2KV3G6XTqscceU0xMjHJzc7Vt2zazSwqYkpIS7d27V5999pkcDocmT56sUaNGdbjJWqj7+OOPdfXVV5tdRsAkJyerX79+Wrp0qSTpk08+UW5urrlFBVD70E50dLSk1r+LRUVFqqmp6fZawvd/FTipuLg4PfTQQ4qJiVFzc7P+8Ic/aMaMGWaX1SViY2P18ccf6/nnnze7lIB68MEHde+992rYsGFml9Ilmpqa1NDQoEGDBmn79u0aPny47rnnHrPLCpjDhw/LarXqiy++0KZNmzRs2LCwHJJst3HjRpWWlurb3/622aUEjM1m09tvv617771Xdrtdzz//vF5//XWzywqYwYMHKzY2Vh988IE8Ho9effVVSZLL5er2WggpPVRLS4tuvfVWWa1WzZ071+xyusTatWs1ZswY/cd//IfZpQTMJ598ovXr1+vRRx81u5QuExkZqeLiYv3qV79STk6OHnzwQa1Zs8a0iXuBVltbK4/Hozlz5ig7O1s//OEPtWzZMjU1NZldWpf46KOPdPHFFyspKcnsUgKmvr5e3//+9/XLX/5SBQUFuu2228JqTorD4dBzzz2n22+/XQ6Hw/dEJS4urttrIaT0QF6vV9OnT9eePXv08ccfh9VwT3l5uTZs2CBJGjNmjH7zm99oyZIlpvw/gK7w1ltv6fDhw8rMzFRSUpJcLpeuvfZa/eUvfzG7tICxWCzq27ev73VycrIkqbq62qySAqp9e/pevXpJklJSUmQYhiorK80sq8t89NFHuuqqq8wuI6D++c9/qqmpST/72c80YsQIPfPMM1q1apU2b95sdmkB84Mf/EBut1uHDx/WddddJ7vdbkrQJKT0QHPnztWePXv0r3/9y/cvynCxYcMGXXPNNb7X7csew2W8/5lnntHOnTu1ceNGbdy4UQkJCXrppZc0bdo0s0sLmMWLF2vgwIG+1wcOHFBsbKzS0tJMrCpwBg0apMjISO3atUuSVFpaqoiIiLBbZi1JVVVVWrNmTVjNR5GkiIgIeTwe32vDMOT1emWz2UysKnBqamp05ZVXqrq6WgkJCVq7dq0mTpxoSi3h8W9u+K2kpES/+93v9OKLL0pqnaDodDrl9XpNriwwxo0bp4aGBr3wwgsqLi7W/PnzlZ+fr4SEBLNLC4j2id3th9VqVXp6uuLj480uLWDGjx+vsrIyvfTSS9q3b5/mzZun22+/PWz6bMTExGjatGl6/PHH9fXXX+v3v/+9rrrqqrD5A3esTz75RH369NGoUaPMLiWgxo8fL7fbrd/97ncqLi7WI488oqysLA0ePNjs0gIiPj5eBw4c0B/+8Ad99dVXevHFF00bziKk9DBLly6V2+3WhAkTlJyc7DvCpRFRUlKS3nvvPf35z3/WsGHDVFpaqoULF5pdFjohLS1Nb731lp555hmNGTNGffv21dNPP212WQH1xz/+UYZh6Pzzz1dpaWnYTe5uF45DPVLrP6OLFi3SK6+8oqFDh2rFihV67733FBkZaXZpAfP6669r0aJFGj9+vL773e/q1ltvNaUOi2EYhinfDAAA0AGepAAAgKBESAEAAEGJkAIAAIISIQUAAAQlQgoAAAhKhBQAABCUCCkAACAoEVIAAEBQIqQAAICgREgBAABB6f8D9ZmT5neq5/IAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.cluster import KMeans\n",
    "\n",
    "loss = []\n",
    "\n",
    "for i in range(1, 10):\n",
    "    kmeans = KMeans(n_clusters=i, max_iter=100).fit(data)\n",
    "    loss.append(kmeans.inertia_ / len(data) / 3)\n",
    "\n",
    "plt.title('K with loss')\n",
    "plt.plot(range(1, 10), loss)\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
